二进制补码二进制形式

par*_*ain 0 c++ binary twos-complement

在TC++编译器中,5的二进制表示是(00000000000000101).我知道负数存储为2的补码,因此二进制的-5(111111111111011).最高位(符号位)为1,表示它是负数.

那么编译器如何知道它是-5?如果我们将上面给出的二进制值(111111111111011)解释为无符号数,它会变得完全不同吗?

另外,为什么1的恭维5 -6(1111111111111010)

var*_*tec 8

编译器不知道.如果你投-5unsigned int你会得到32763.


gre*_*ade 5

编译器知道,因为这是CPU本身使用的约定.您的计算机有一个CPU,以二进制补码表示法存储负数,因此编译器也会如此.如果你的CPU支持一个补码,编译器会使用(如与IEEE浮动的情况下,偶然).

关于该主题的维基百科文章解释了两个补码表示法的工作原理.