【发布时间】:2011-11-01 10:31:19
【问题描述】:
可能重复:
signed to unsigned conversion in C - is it always safe?
假设我声明了一个 unsigned int 类型的变量:unsigned int x = -1;
现在二进制补码中的 -1(假设是 32 位机器)是 0xFFFFFFFF。 现在,当我将此值分配给 x 时,是否将值 0x7FFFFFFF 分配给 x?
如果是这样,那么 printf ("%d",x);会打印相当于 0x7FFFFFFF 的十进制数,对吧?但是,显然这不会发生,因为打印的值为 -1。我在这里错过了什么?
编辑:我知道我们可以使用 %u 格式说明符来打印无符号值。 但这无助于回答上述问题。
【问题讨论】:
-
0x7FFFFFFF是从哪里来的? -
@Evan:翻转 MSB。只是猜测,因为我不知道转换是如何发生的
-
C99 标准的第 6.3.1.3 节应该回答您的问题。但这应该更好地回答你的问题stackoverflow.com/questions/50605/…