否定位
问题描述:
的
在下面的代码给出输出-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;
}
答
情况下,~
操作反转所有位的操作数。在这里,x
开始为0,所以假设的int
是4个字节宽它具有以下二进制表示:
00000000 00000000 00000000 00000000
当所有位被倒置你:
11111111 11111111 11111111 11111111
假设的二进制补码表示整数,这个比特序列的值是-1。请注意,如果您将此值加1,则所有位变为0(即-1 + 1 = 0)。
相比之下,-2147483647值有如下表示:
10000000 00000000 00000000 00000001
也许你需要了解[补](https://en.wikipedia.org/wiki/Two's_complement) ? –
你期望什么? 'unsigned'不能包含负数,所以'all bits 1'将会是一个很大的数字,而'signed'则不会(提示:符号位,二进制补码)。你的具体问题是什么? –
只是想知道,为什么在INT它是不是给-2147483647这是111 .... 32倍的情况下 –