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

补码情况下二者同意,不浪费任何一个空间

 
posted @ 2022-12-27 17:21  KittySmith  阅读(645)  评论(0编辑  收藏  举报