在TC++编译器中,5的二进制表示是(00000000000000101).我知道负数存储为2的补码,因此二进制的-5是(111111111111011).最高位(符号位)为1,表示它是负数.
那么编译器如何知道它是-5?如果我们将上面给出的二进制值(111111111111011)解释为无符号数,它会变得完全不同吗?
另外,为什么1的恭维5 -6(1111111111111010)?
编译器不知道.如果你投-5
来unsigned int
你会得到32763
.
编译器知道,因为这是CPU本身使用的约定.您的计算机有一个CPU,以二进制补码表示法存储负数,因此编译器也会如此.如果你的CPU支持一个补码,编译器会使用(如与IEEE浮动的情况下,偶然).
关于该主题的维基百科文章解释了两个补码表示法的工作原理.