计算机为什么用补码来表示二进制机器码
摘自书本内容:
补码:
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.
计算机是以补码形式存放数的。
浙公网安备 33010602011771号