2017-09-01 22 views
-6

在下面的代碼給出輸出-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; 
} 
+7

也許你需要了解[補](https://en.wikipedia.org/wiki/Two's_complement) ? –

+1

你期望什麼? 'unsigned'不能包含負數,所以'all bits 1'將會是一個很大的數字,而'signed'則不會(提示:符號位,二進制補碼)。你的具體問題是什麼? –

+0

只是想知道,爲什麼在INT它是不是給-2147483647這是111 .... 32倍的情況下 –

回答

2

情況下,~操作反轉所有位的操作數。在這裏,x開始爲0,所以假設的int是4個字節寬它具有以下二進制表示:

00000000 00000000 00000000 00000000 

當所有位被倒置你:

11111111 11111111 11111111 11111111 

假設的二進制補碼錶示整數,這個比特序列的值是-1。請注意,如果您將此值加1,則所有位變爲0(即-1 + 1 = 0)。

相比之下,-2147483647值有如下表示:

10000000 00000000 00000000 00000001