这是一个关于有符号整数位表示的疑问。比如你要表示-1的时候,就相当于(+1)的2的补码。所以 -1 表示为 0xFFFFFFF。现在,当我将我的数字移动 31 并打印结果时,它返回为 -1。
signed int a = -1;
printf(("The number is %d ",(a>>31));//this prints as -1
谁能给我解释一下这些位是如何表示负数的?
谢谢。
最佳答案
当最高位为零时,数字为正数。为 1 时为负数。
右移的负数继续向右移一个“1”作为最高位以保持数字为负数。这就是您得到该答案的原因。
有关二进制补码的更多信息,请参阅 this Stackoverflow question .
@Stobor 指出一些 C 实现可以将 0 移到高位而不是 1。[在维基百科中验证。]在 Java 中,它可靠地是算术移位。
但是提问者给出的输出显示他的编译器正在进行算术移位。
关于c - 负数的位表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1175700/