计算机中整数,定点数,浮点数的表示


前言

因为学校里教计算机系统基础的老师属实垃圾,几堂课下来讲的不明不白,所以特自己总结该部分内容。

一、计算机中整数的表示

1.原码

原码的表示十分简单,由一位符号位和几位数值位表示,符号位为1表示负数,0则为正数。
在这里插入图片描述

2.移码

所谓移码,就是将原本表示的数值加上一个偏置常数所得的数,通常是加上编码位数的最高位,即2^(n-1) 或 2^(n-1)-1,移码表示的好处就是能将负数转变为正数,从而避免了0表示不唯一且可以较好的比较两数的大小。
在这里插入图片描述

3.反码

反码就是将原本是负数的原码除符号位以外全部取反,如下图:
在这里插入图片描述
反码因为优点不明显,所以不常用。

4.补码

补码就是模减去负数的绝对值,在二进制中表现为各位取反末位加1,由于两数的相减可以用被减数加上减数的补码来代替,所以补码的优势十分明显。
在这里插入图片描述

在这里插入图片描述

由图可知,1+n位的二进制数中,可表示的最大正数为2^n-1,而最大负数则为- 2 ^n。
由于补码表示的溢出,这里可能有点不太明白,但其实补码的符号位,即模位是原补码的位数加一,可以用变形补码做一个比较好的李姐,如下图所示:
在这里插入图片描述

二、计算机中定点数的表示

计算机中定点数的表示如同整数的表示格式基本一致,无非就是中间多了个小数点罢了,现给出1+15位纯小数各个表示方式的最大值和最小值:
在这里插入图片描述
可以看到,补码和反码表示的最小值竟然是相同的,这时就可以用变形补码来解释:
在这里插入图片描述
这样是不是就清楚万分了捏。
特别注意的是,补码表示的最小数是因为溢出所以才要用变形补码表示,在计算时,各位取反末位加一要把假的符号位算作数值才能取得真值。

三、计算机中浮点数的表示

明白了前面的定点数和整数的表示了以后,浮点数的表示就要好理解多了。
浮点数是由符号位,阶码和尾数表示的,为了比较数值的大小,阶码通常用移码来表示。

1. IEEE754标准下浮点数的表示

浮点数表示的范围(非IEEE754标准):
在这里插入图片描述
若有基数或底数的概念,其通常为2/4/8/16,对浮点数的表示无影响。

为了统一浮点数表示规范,推出IEEE754标准:
在这里插入图片描述
IEEE754标准规定阶码的偏置常数为32位下127,64位下1023,这样规定的好处是浮点数表示的范围更大了,32位下(-127~126),64位下(-1023–1022)。而尾数中则隐含表示一位1,例如1.011111的尾数是011111+17个0。
在IEEE754标准下,阶码和尾数全0的数表示为0;
阶码全0而尾数非0的数为非规格化数;
阶码全1而尾数全0的数表示为无穷,以符号位区别正负;
阶码全1而尾数非0的数表示为NAN(Not a Number)非数,这点在JavaScript的编码中经常使用。

2. 规格化16位浮点数的表示

由E阶码(移码表示)+S符号位+M尾数(补码表示)构成,通常有ESM,SEM两种表现形式,无非就是换了个位置,其中阶码为6位,尾数为9位。
这里给出阶码6位,尾数10位(补码)的表示范围:
①最小数:111111 1 000000000,尾数为1的补码表示,阶码(63-32)= 31,结果是-2^31;
②最大负数:000000 1 011111111,尾数为2^-1 + 2^-9的补码表示,阶码为-32,结果是-( 2^-1 + 2^-9 ) * 2^-32;
③最小正数:000000 0 100000000,尾数为2^-1,阶码为-32,结果为2 ^-1 *2^-32;
④最大数:111111 0 111111111,尾数为1-2^-9,阶码为31,结果为(1-2 ^-9)2 ^31。

总结

大致把值得注意的内容梳理了一遍,如有错误欢迎指出,以上。

猜你喜欢

转载自blog.csdn.net/skl4869/article/details/120524898