为什么对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 |