以下代码提供输出-1
。
#include <iostream>
using namespace std;
int main()
{
int x=0;
cout<<~x;
return 0;
}
但是,当我进行以下修改时,答案将更改为4294967295
。
只是想知道为什么在int的情况下它不给-2147483647
这是111 .... 32次
#include <iostream>
using namespace std;
int main() {
unsigned int x=0;
cout<<~x;
return 0;
}
答案 0 :(得分:2)
~
运算符反转操作数中的所有位。这里,x
从0开始。因此,假设int
是4个字节宽,则它具有以下二进制表示:
00000000 00000000 00000000 00000000
当所有位都被反转时,你得到:
11111111 11111111 11111111 11111111
假设两个整数的补码表示,该位序列的值为-1。请注意,如果向此值添加1,则所有位都变为0(即-1 + 1 = 0)。
相反,值-2147483647具有以下表示:
10000000 00000000 00000000 00000001