為什么對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 |
