C 为什么1s补码是-2

C 为什么1s补码是-2,c,complement,C,Complement,请通过显示位运算进行解释,这将有助于理解 提前感谢……这正是你所能想象的1是二进制的00000001(位数取决于平台上int的大小)~1执行位反转,即11111111 0。在(最常见的二进制算术系统)中,这等于-2此标识应帮助您记住~的行为: int main() { int a=1,b; b=~1; printf(""%d",b); return 0; } 将其应用于1: ~x == -x - 1 以位表示: ~1 == -1 - 1

请通过显示位运算进行解释,这将有助于理解


提前感谢……

这正是你所能想象的
1
是二进制的
00000001
(位数取决于平台上
int
的大小)<代码>~1执行位反转,即
11111111 0
。在(最常见的二进制算术系统)中,这等于
-2

此标识应帮助您记住
~
的行为:

int main()
{
       int a=1,b;
       b=~1;
       printf(""%d",b);
       return 0;
}
将其应用于1:

~x == -x - 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
如果你考虑一个有符号整数, 0: 00000000 -1 -1: 11111111 -2:11111110


基本上,从零开始,减去2,然后看得到什么。

(与无符号运算/打印相比)为什么有三个双引号?
 1:  00000001
~1:  11111110