为什么1的取反是-2

今天做题的过程中遇见了一个BUG,一直找不到,最后终于发现在取反1这里出现了错误,我一直认为取反1的结果是0,但是其实取反1的结果是-2。

讲解

我们的int存储时候是4个字节,每个字节是8位。

所以1的二进制数为00000000 0000000 0000000 00000001

1的取反的二进制数为11111111 11111111 11111111 11111110

因为数在计算机中存储的时候都是存储的补码,所以我们应该先将1的取反的补码转换成原码,才能看出来这个数是多少。

原码->补码 ,我们是将原码(除了符号位)取反再加1。所以补码->原码,我们就是将补码(除了符号位)减1再取反。

所以1的取反的原码是10000000 0000000 0000000 00000010

这个结果就很明显了,就是-2了。

THE END