【发布时间】:2009-07-24 04:03:04
【问题描述】:
这是一个关于有符号整数位表示的疑问。例如,当要表示-1时,就相当于(+1)的2的补码。所以 -1 表示为 0xFFFFFFF。现在,当我将数字移动 31 并打印结果时,它会返回为 -1。
signed int a = -1;
printf(("The number is %d ",(a>>31));//this prints as -1
那么谁能给我解释一下这些位是如何表示负数的?
谢谢。
【问题讨论】:
-
从另一个角度看:将任何 N 位(符号扩展)右移视为除以 2^N,向下舍入(朝向负无穷大,而不是朝向 0。)因此 -1右移(带符号扩展)任意次数将继续产生 -1。
标签: c bit-manipulation