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