计算机中定点数表示方法——补码

(1)模的概念
假设两位十进制数计算:
• 77 — 38 = ?
• 77 + 62 = 139
77 — 38 = 77 + 62 = 39 (mod 100)
由此可以看出,减38和加62是等价的,前提是说对模为100是正确的。这个100在数学上称为模数

模的概念:
计算机中运算器、寄存器、计数器都有一定的位数,不可能容纳无限大的任意数。当运算结果超出实际的最大表示范围,就会发生溢出,此时所产生的溢出量就是模(module)。
因此,可以把模定义为一个计量器的容量。如:一个4位的计数器,它的计数值为0–15。当计数器计满15之后再加1,这个计数器就发生溢出,其溢出量为16,也就是模等于16。
• 定点小数的溢出量为2,即以2为模;
• 一个字长为n+1位的定点整数的溢出量为2^(n+1)
即以2^(n+1)为模。

定义:任意一个数X的补码记为在这里插入图片描述

在这里插入图片描述

(2)定点小数
若定点小数的补码形式为 x0. x1 x2 ··· xn,则补码表示的定义是:
在这里插入图片描述

例: x = +0.1011, 则 [x]补=0.1011
x = -0.1011, 则 [x]补=10+ x = 10.0000-0.1011= 1.0101
对于0,[+0]补=[-0]补=0.0000  (mod 2)
注意:0的补码表示只有一种形式。

(3)定点整数
若定点整数的补码形式为 x0 x1 x2 ··· xn,则补码表示的定义是:
在这里插入图片描述
例: x = +0111, 则 [x]补=00111
x = -0111 , 则 [x]补=2^(4+1) – |-0111|=100000 – 0111=11001

(4)补码的表数范围
n+1位补码整数: 2^n -1 ----2^n
n+1 位补码小数: 1- 2^(-n) ------ - 1
若补码整数的位数是8位,其表示的最小值、最大值:-128 – 127
若补码小数的位数是8位,其表示的最小值、最大值: -1 – 1- 2^(-7) 即 -1 – 127/128

(5)结论
①补码最高一-位为符号位,0正1负;
②补码零有唯一编码;
③补码能很好用于加减运算。1
④补码满足 [-x]补+ [x]补=0 例如:[+7]补=00111 [-7]补=11001
⑤最高位参与演算,与其它位一样对待。
⑥扩展方便。5位的补码扩展为8位 00111 --> 00000111 11001 --> 11111001
⑦算术移位。假设 [x]补= x0. x1 x2 ··· xn [x/2]补= x0. x0 x1 x2 ··· xn-1
⑧最大的优点就是将减法运算转换成加法运算.
[X+Y]补= [X]补+[Y]补 [X - Y]补 = [X]补+ [-Y]补

例如: X=(11)10进制=(1011)2进制 Y=(5)10进制=(0101)2进制 已知字长n=5位
[X]补+ [-Y]补=01011+11011=100110=00110=(6)10 注: 最高1位已经超过字长故应丢掉
[X - Y]补= [0110]补=00110

(6)补码编码的简便方法
正数的补码在其二进制代码前加上符号位0;
负数的补码是将二进制代码前加0后,再全部按位取反,然后在最低位上加1。

例 设x=1010,y=-1010,求[x]补和[y]补。
解:根据补码的编码方法,正数的补码与它的二进制表示相同,所以加上符号位0后得
[x]补=01010
负数的补码的编码方法
1)将二进制代码前加零 0 1 0 1 0
2)再全部按位取反 1 0 1 0 1
3)然后在最低位上加一 1 0 1 1 0
得到 [y]补=10110

(7)原码与补码之间的转换
①已知原码求补码正数 [X]补=[X]原
负数 符号除外,各位取反,末位加1 (注意该说法与前面的补码编码简便方法的说法有所不同)

例:X= -1001001
[X]原=11001001
[X]补=10110110+1=10110111
验证:[X]补= 2^(7+1) +X=100000000-1001001= 10110111
在这里插入图片描述

②由[X]补求[-X]补

运算过程是:将[X]补连同符号一起将各位取反,末位再加1。
例:设字长为8位
X= +100 1001
[X]补 = 0100 1001
各位取反 1011 0110
末位再加1 1011 0111
即: [-X]补= 1011 0111

③补码与真值之间的转换

  • 求值方法 x=-x02^n+
    x1
    2^(n-1)…+xn-1*2+xn

例如: 1000 0100 的真值为-128+4=-124 ,

  • 补码:符号位为“1”----负,余下求补为数值部分 ; 符号位为“0”----正,余下为数值部分

例:[X]补 = 0100 1001 X= 0100 1001
例:[X]补 = 1000 0000 X=-1000 0000B =-80H =-128

发布了14 篇原创文章 · 获赞 0 · 访问量 338

猜你喜欢

转载自blog.csdn.net/Dnesity/article/details/104531212