A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码解释过程
        -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,记下来就行!

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

1 个回复

倒序浏览
科普学下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马