为什么1的补码是-2
int main()
{
int a=1,b;
b=~1;
printf(""%d",b);
return 0;
}
请通过显示按位运算来解释,这将有助于理解......
提前感谢......
int main()
{
int a=1,b;
b=~1;
printf(""%d",b);
return 0;
}
pls explain by showing bitwise operation it will be helpful to understand...
thanks in advance.......
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这正是您所想象的。
1
是二进制的00000001
(位数取决于您平台上int
的大小)。~1
执行按位反转,即111111110
。在 二进制补码(最常见的二进制算术系统)中,这等于- 2.
.It's exactly what you might imagine.
1
is00000001
in binary (number of digits depend on size ofint
on your platform).~1
performs a bitwise-inversion, i.e.111111110
. In two's complement (the most common system of binary arithmetic), this is equal to-2
.这个恒等式应该可以帮助您记住
~
的行为:将其应用于 1:
以位为单位:
This identity should help you remember the behaviour of
~
:Applying it to 1:
In bits:
正在发生的事情是这样的:
如果你考虑一个有符号整数,
0: 00000000 -1
-1:11111111
-2: 11111110
基本上,从零开始减去二,看看会得到什么。
Here is what is happening:
If you think about a signed integer,
0: 00000000 -1
-1: 11111111
-2: 11111110
Basically, start from zero and subtract two and see what you get.