黑马程序员技术交流社区
标题:
很多人都在纠结为什么有一个在byte范围内多出一个-128
[打印本页]
作者:
zhiguoguo
时间:
2015-12-17 23:53
标题:
很多人都在纠结为什么有一个在byte范围内多出一个-128
代码解释过程
-127 - 1 = -128 ,那么在计算机中是如何进行的,1、计算机没有减法 2、计算机中只存在补码
-127
原码:11111111
反码:10000000
补码:10000001
-1
原码:10000001
反码:11111110
补码:11111111
所以
-127 - 1
进化为 -127 +(-1)
二进制计算过程
-127 补码: 10000001
+
-1 补码: 11111111
-128 补码 10000000(符号位参与运算,超出部分舍弃)
-128
补码:10000000
+(-1)
反码:11111111
(取反)
原码:10000000
问题来了 : 到这里得到了-128的原码
(1)-128的原码与补码相同(一般只有正数的原码和补码相同)
(2)按照-128的原码,并不符合我们对数据的定义原则(首位不是符号位么,后面全是0,那不应该是-0么)
总结:首先根据代码过程,我们得到10000000确实对应-128的结果,这一点是确认无误的
其次在计算机中使用补码来表示数据的,对于0的表示,使用00000000表示肯定更为合适,所以对于多出来的10000000,因为其首位为1,所以用来表示负数。
那么剩下的不过是个规定问题,至于谁对定的,有传言是印度阿三,其实不重要!
结论,根据我们的计算得知-128在使用一个字节表示的时候,对应的原码和补码都是10000000,同时这并不妨碍计算机中使用补码对其他数据的表示,既然没有任何影响,还能多表示出来一个数,这样的好事自然被作为一种特例而规定下来!
SO,记下来就行!
作者:
Mr.zhao
时间:
2015-12-18 00:32
科普学下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2