计算机为什么用补码来表示二进制机器码

摘自书本内容:

补码:

                   12                                       原码和反码都不便于计算机内的运算,因为在运算中要单独处理其符号。例如,对以原码表示的+7和-7相加,必须先判断各自的符号位,然后对7位进行相应的处理,很不方便。

  11                             1                        因此,最好能做到将符号位和其它位统一处理。对减法也按加法来处理。这就是“补码”。

10                                     2                   补码的原理可以用时钟来说明,见图11.1.如果要将时针从9点拨到4点,可以向前拨,也可以向后拨。其表示如下:

 9                                     3                   9-5=4  (向后拨5个字)

   8                                 4                     9+7=16  (向前拨7个字)

       7                      5                            从图上可见,向前拨7个字也能指向4.这是由于钟是圆的,12点的下一个小时是1点。时钟是12进制的,可以把12点看成0点,13点就是1点,其实是进位后得到了十二进制数11,其

                   6                                       中第一个1是进位,即高位,第二个1是低位。高位不保留,只保留低位,因此,16点用十二进制数表示为14,高位不保留,在时钟上就是4点,用十进制数可表示为:16-12=4.

                                        对十进制数,如果想从9得到结果值5,可以用减法: 9-4=5

        已知4的补数为10-4=6,即4与6互补。因此9-4可以改写为加法:

                9+6=15

再去掉高位1,得5.

         在计算机中,以一个有限长度的二进位作为数的摸,如果用1个字节表示一个数,一个字节为8,模为2的8次方。因为逢2的8次方就进1,在内存中情况为    100000000

进位被丢弃。

         补码是这样规定的:

            正数:其原码、反码、补码相同。例如,+7的补码也是00000111.

            负数:最高位为1,其余各位为原码的相应位取反,然后对整个数加1.例如:

             -7   的原码:                   10000111

           -7    的补码:第一步         11111000

                               第二步:                +1___

                                                     11111001

即对+7各位取反加1.也可以这样做:1.将该负数(不包括0)先加1;2.然后将其绝对值以二进制表示;3.在对其求反。例如,-7先加1得-6,对6以二进制表示为0000110,再取反的1111001,它就是-7的补码,见表11.1

表11.1

           数值            原码                   反码                    补码

          +7              00000111        00000111           00000111

          -7              10001111        11111000            11111001

          如果一直一个负数的补码,想将其转换为十进制数,可以:1.先对各位取反;2.在将其转换成十进制;3.加上负号,减1.例如:对11111001,显然是一个负数,取反得00000110,转换为十进制得6了,加负号的-6,再减1得-7.

          也可以这样:补码中的最高位不改动,其余各位取反加1,这就得到原码。如11111001,先变成10000110,再加1得10000111,它是-7的原码。

          +0的补码表示为:00000000

          -0的补码可以这样求出:1.最高位为1,其余各位为原码取反,即对000000求反的11111111;2.加1,的1000000,进位1倍丢弃(因为一个字节只能容纳8位,2的8次方只能被存储为00000000),因此-0的补码也是00000000.可知,+0和-0的补码表示是相同的。或者说0的补码是唯一的。

          用补码进行运算,减法可以用加法来实现。如+7+6应得1.可以将+7的补码和-6的补码相加,就得到结果值的补码。

                    +7  的补码:      00000111

                   -6   的补码:       11111010

                    (相加)            10000001

进位被舍去。后面8位00000001就是1的补码。

           如果将-7+6,同样

                                      -7     的补码: 00000011

                                     -6      的补码: 11111010

                                       (相加)        11111111   

11111111是-1的补码。

表11.2是以补码表示的数的一些例子。

表11.2

                                   数值                          补码

                                   0                              00000000

                                  -1                             11111111

                                  -2                             11111110

                                  -3                             11111101

                                  -4                             11111100

                                 ...

                                 -127                          10000001

                                -128                           10000000

--------------------------------------------------------------------------------

                                     1                           00000001

                                     2                           00000010

                                    ...                           ...(往下不断加1)

                                  126                          01111110

                                  127                          0111111

----------------------------------------------------------------------------------------------------

可以看出:以补码形式在一个字节(8位)中存在一个数,最大值为127,最小值为-128.即数的范围为-128~127.

计算机是以补码形式存放数的。

posted @ 2019-11-08 16:52  博客_在线  阅读(987)  评论(0)    收藏  举报