对于某一确定的模,某数减去小于模的另一个数,总可以用该数加上模与另一个数绝对值之差来代替。(这就是为什么可以用补码进行加减运算的原因)
原码(true form)原码体现了数据的绝对值
定点小数的原码定义如下:
【x】原 = if 0<=x<1, x
if -1
补码
定点小数的补码定义如下:
【x】补= if 0<=x<1, x
if -1<=x<0, 2+x (模2)
定点整数的补码定义如下:
【x】补 = if 0<=x<2^(n-1), x
if -2^(n-1)<=x<0, 2^(n)+x (模2^n)
正数的补码与其原码相同,负数补码求解的一个简便方式:符号位不变,数值部分自低向高位搜索,第一个1及其以右的各位0保持不变,以左的各位按位取反。
补码的符号位扩展:
结论1:要将n位纯小数补码变为2n位,只需在末尾添加n个0即可。
结论2:要将整数补码的模扩大2^n倍,只需将符号位向左复制n位即可。
补码的算术右移(除2运算)
结论:若已知【x】补求【0.5x】补,可将【x】补连同符号位在内右移1位,同时符号位保持不变。
补码的算术左移(乘2运算)
结论:已知【x】补求【2x】补,只需要将【x】补的各位左移1位,末位补0.
反码
定点小数的反码如下:
【x】反 = if 0<=x<1, x
if -1移码
由于浮点数的阶码使用移码,所以只介绍定点整数的移码
【x】移 = 2^(n-1)+x
原码和反码的表示范围相同,补码的移码的表示范围相同。
【x】移----》符号取反《---【x】补
浮点数
因为无论采用定点,还是浮点表示,n位编码总是最多只能表示2^n个数,所以采用浮点表示法虽然扩大了表示范围,但没有增加可表示的数值的个数,只是数据间的间隔主稀疏了。
浮点数的表示范围主要由阶码决定,精度则由尾数决定。为了尽可能多地保留有效数字的位数,使有效数字尽量占满尾数数位,通常采用浮点数规格化形式,即将尾数的绝对值限定在某个范围内。
如果阶码的底为2,则规格化浮点数的尾数应满足:1/2<=|M|<1
M>=0,M=0.1xxxx...x M<0, M= 1.0xxx...x
尾数采用补码表示。为了使计算机判断方便,一般不把【-1/2】补(1.1000.000)列为规格化的数,而把【-1】补(1.000.000)列为规格化的数。
最后欢迎大家访问我的个人网站: 1024s