为什么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了。
版权声明:
作者:徐锦桐
链接:https://www.xujintong.com/2023/02/18/145/
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
作者:徐锦桐
链接:https://www.xujintong.com/2023/02/18/145/
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
THE END