实数在计算机中的表示

之前在学习计算机实数在计算机中的表示时,有点糊涂,最近重新学习,明白了一些,在此记录:
众所周知,计算机中是没有小数点的,因此就要规定实数的表示方式,目前的方式有以下两种:
若无特殊说明,所有数字均用补码表示。

文章目录

        • 1.定点表示
        • 2.浮点表示

1.定点表示

以下均假设机器字长为n+1位

分为整数定点和小数定点。整数定点把小数点看成在最后,相当于整数表示了,其范围是 [ − 2 n , 2 n − 1 ] [-2^{n},2^{n}-1] [2n,2n1]
而小数定点,则是把小数点看成在最高位(即符号位)后面,因而只能表示纯小数,其范围为
[ − 1 , − 2 − n ] [-1,-2^{-n}] [1,2n](负数部分), [ 2 − n , 1 − 2 − n ] [2^{-n},1-2^{-n}] [2n,12n](正数部分)与0

对范围的解释:
正数部分的范围容易理解(符号为0,数位分别为:只有最低位为1,全为1)
至于负数部分:-1表示的是符号位为1,数位也全部为1。按照补码转原码的方式,转换后的数看似为-0,实际上在转换过程中发生了退位,所以为-1。
因此,负数部分比正数部分多了一个-1.
注意:所有范围看起来是连续的,实际上是离散的。只能表示 2 n 2^n 2n个数

2.浮点表示

浮点数用阶码+尾数的方式表示。感觉就是上面两种定点机的结合。
若符号为s,阶码表示的数为十进制的x,尾数为y,则此数表示为(-1)s * 2x * y
由上面定点机的范围,我们可以得到阶码m+1位(包含1位阶符),尾数n+1位(1位数符,也是整个数字的符号)的浮点机的表示范围是
[ − 2 2 m − 1 , − 2 − 2 m ∗ 2 − n ] [-2^{2^m-1},-2^{-2^m}*2^{-n}] [22m1,22m2n] [ 2 − 2 m ∗ 2 − n , 2 2 m − 1 ∗ ( 1 − 2 − n ) ] [2^{-2^m}*2^{-n},2^{2^m-1}*(1-2^{-n})] [22m2n,22m1(12n)]与0
阶码绝对值小于-2m的数不能正常表示,称为“下溢”,当成机器零处理。
绝对值过大的数也无法正常表示,称为“上溢”。
不难看出:阶码长度决定数据范围,尾数长度决定精度。

你可能感兴趣的:(计算机组成原理,数制)