将无符号整数转换为有符号整数 C

标签 c int unsigned-integer

我正在尝试将 65529unsigned int 转换为带符号的 int。我尝试过这样的类型转换:

unsigned int x = 65529;
int y = (int) x;

但是 y 在应该返回 -7 时仍然返回 65529。这是为什么?

最佳答案

您似乎期望 intunsigned 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/

相关文章:

c++ - 使用整数的最佳方法?

c - 为什么这个 C 代码的输出应该是 "no"?

c - 为什么在使用指针时会得到 "bus error"?

c - 使用指针执行 strcat 时出现段错误(核心已转储)

c++ - vector 元素大小

java - 为什么 double 到 int 转换在 java 中不能按预期工作?

javascript - 现在有多少位可用于 JS 风格的 "integer"数学?

c++ - 16 到 32 位整数转换与性能

c - getopt_long 不传递参数

c# - 一元加号运算符有什么作用?