我正在尝试将 65529
从 unsigned int
转换为带符号的 int
。我尝试过这样的类型转换:
unsigned int x = 65529;
int y = (int) x;
但是 y
在应该返回 -7 时仍然返回 65529。这是为什么?
最佳答案
您似乎期望 int
和 unsigned int
是 16 位整数。显然不是这样。最有可能的是,它是一个 32 位整数 - 它足够大,可以避免您期望的回绕。
请注意,没有完全符合 C 的方法来执行此操作,因为对于超出范围的值在有符号/无符号之间进行转换是实现定义的。但这在大多数情况下仍然有效:
unsigned int x = 65529;
int y = (short) x; // If short is a 16-bit integer.
或者:
unsigned int x = 65529;
int y = (int16_t) x; // This is defined in <stdint.h>
关于将无符号整数转换为有符号整数 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317295/