為什么對1取反為-2?
int i =5;
// ~i = -6
int j = 1;
// ~j = -2
為什么?
——原來計算機中帶符號的整數以二進制的補碼進行存儲。
參見:
http://www.cnblogs.com/dolphin0520/archive/2012/10/09/2711768.html
從原碼/補碼的角度來看,就清楚了。
1 | ||||
---|---|---|---|---|
原碼 | 00000000 | 00000000 | 00000000 | 00000001 |
取反 | 11111111 | 11111111 | 11111111 | 11111110 |
-2 | ||||
原碼 | 10000000 | 00000000 | 00000000 | 00000010 |
反碼 | 11111111 | 11111111 | 11111111 | 11111101 |
補碼 | 11111111 | 11111111 | 11111111 | 11111110 |
5 | ||||
原碼 | 00000000 | 00000000 | 00000000 | 00000101 |
取反 | 11111111 | 11111111 | 11111111 | 11111010 |
-6 | ||||
原碼 | 10000000 | 00000000 | 00000000 | 00000110 |
反碼 | 11111111 | 11111111 | 11111111 | 11111001 |
補碼 | 11111111 | 11111111 | 11111111 | 11111010 |