程序是怎样跑起来的第二章
原码、补码、反码搞得我头疼,每次记住了,又忘记了,反复如此…经过深入的研究,这下真的彻底记住了。
先看下面的几个小问题,回头再来解决:
-
二进制11111111等于多少(十进制)
-
127+1=?
原码和反码最为简单:原码就是十进制转化为二进制,反码就是0变为1,1变为0。比如十进制1的原码:00000001,反码:11111110。
怎么区别正负数呢?正数的最高位是0,负数的最高位是1。秉持这个原则来计算1-1=?
What!!!竟然不为0!!!由此看出,这种方案虽然简单,但是不能得到正确得结果。
所以聪明的程序员设想出了补码。因为1+?=0,那么?等于多少呢?
这就容易多了,?=11111111,即-1=11111111,这种形式就叫做补码,那么负数的补码怎么求呢?有啥规律嘛?
负数的补码=绝对值的二进制先取反,再加一比如-2的绝对值是2,二进制为00000010,取反11111101再加1为11111110(补码)。
再回头看前边提出的问题11111111转化为十进制为?最高位为1,所以这个数是负数,11111111(负数)+???(正数)=0可以得???=00000001(十进制为1),那么-1.
127+1=?如下图所示127和1的二进制表示分别为:01111111、00000001,相加得到结果为10000000(最高位是1,故为负数,按照负数(补码)的规律倒推回去即可),或者可以按照10000000(负数)+???(整数)=0来求得???,即为负数的绝对值128。
所以127+1=-128。
觉得有帮助的话,点个赞呗!