为什么1s补码是-2

时间:2011-02-12 19:07:23

标签: c complement

int main()
{
       int a=1,b;
       b=~1;
       printf(""%d",b);
       return 0;
}

通过显示按位操作来解释它将有助于理解......

提前感谢.......

3 个答案:

答案 0 :(得分:8)

这正是你可能想象的。二进制100000001(位数取决于您平台上int的大小)。 ~1执行按位反转,即111111110。在two's complement(最常见的二进制算术系统)中,这等于-2

答案 1 :(得分:3)

此身份应该可以帮助您记住~的行为:

~x == -x - 1

将其应用于1:

~1 == -1 - 1
   == -2

位:

 1 == ...0000000001
~1 == ...1111111110  # flip the bits

 0 == ...0000000000
-1 == ...1111111111  # two's complement representation for negative numbers
-2 == ...1111111110

答案 2 :(得分:0)

以下是发生的事情:

 1:  00000001
~1:  11111110

如果考虑有符号整数,       0:00000000 -1      -1:11111111      -2:11111110

基本上,从零开始,减去两个,看看你得到了什么。