为什么1的补码是-2

发布于 2024-10-17 12:10:43 字数 165 浏览 2 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小姐丶请自重 2024-10-24 12:10:43

这正是您所想象的。 1 是二进制的 00000001(位数取决于您平台上 int 的大小)。 ~1 执行按位反转,即 111111110。在 二进制补码(最常见的二进制算术系统)中,这等于 - 2..

It's exactly what you might imagine. 1 is 00000001 in binary (number of digits depend on size of int 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.

花开浅夏 2024-10-24 12:10:43

这个恒等式应该可以帮助您记住 ~ 的行为:

~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

This identity should help you remember the behaviour of ~:

~x == -x - 1

Applying it to 1:

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

In bits:

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

 0 == ...0000000000
-1 == ...1111111111  # two's complement representation for negative numbers
-2 == ...1111111110
谁的年少不轻狂 2024-10-24 12:10:43

正在发生的事情是这样的:

 1:  00000001
~1:  11111110

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

基本上,从零开始减去二,看看会得到什么。

Here is what is happening:

 1:  00000001
~1:  11111110

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文