为什么1按位取反的结果是-2?
假设计算机存取一个数用8位表示
按位取反要考虑符号位(最高位为0则正,反之则为负) 5=00000101 取反 11111010
但是符号位发生改变,计算机中数的存储都是用补码进行存储的,正数和0的补码是其本身
负数补码对应的负数的值是符号位不变,其余位置取反 再+1
进行+1操作会影响符号位的变化
11111010-->10000101-->10000110 == -6
这时大家可以验证一下1按位取反为什么是-2,假设计算机存取一个数用8位表示
1=00000001 取反 11111110
现在求11111110对应的十进制数,因为这是一个负数补码,要通过这个补码进行还原
11111110-->10000001-->10000010 =-2
同时看看-1按位取反结果是多少
-1=11111111(-1的补码)---取反-->00000000
而00000000是0的补码,因此-1按位取反是0
扩展:为什么用补码,只要考虑到+0和-0的反码就能想明白
0在计算机种分+0与-0,它们的原码,补码,反码如下:
1、[+0]原码=0000 0000, [-0]原码=1000 0000;
2、[+0]反码=0000 0000, [-0]反码=1111 1111;
3、[+0]补码=0000 0000, [-0]补码=0000 0000
补码情况下二者同意,不浪费任何一个空间