黑马程序员技术交流社区

标题: 很多人都在纠结为什么有一个在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