概述
之前在学习计算机实数在计算机中的表示时,有点糊涂,最近重新学习,明白了一些,在此记录:
众所周知,计算机中是没有小数点的,因此就要规定实数的表示方式,目前的方式有以下两种:
若无特殊说明,所有数字均用补码表示。
文章目录
- 1.定点表示
- 2.浮点表示
1.定点表示
以下均假设机器字长为n+1位
分为整数定点和小数定点。整数定点把小数点看成在最后,相当于整数表示了,其范围是
[
−
2
n
,
2
n
−
1
]
[-2^{n},2^{n}-1]
[−2n,2n−1]。
而小数定点,则是把小数点看成在最高位(即符号位)后面,因而只能表示纯小数,其范围为
[
−
1
,
−
2
−
n
]
[-1,-2^{-n}]
[−1,−2−n](负数部分),
[
2
−
n
,
1
−
2
−
n
]
[2^{-n},1-2^{-n}]
[2−n,1−2−n](正数部分)与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}]
[−22m−1,−2−2m∗2−n],
[
2
−
2
m
∗
2
−
n
,
2
2
m
−
1
∗
(
1
−
2
−
n
)
]
[2^{-2^m}*2^{-n},2^{2^m-1}*(1-2^{-n})]
[2−2m∗2−n,22m−1∗(1−2−n)]与0
阶码绝对值小于-2m的数不能正常表示,称为“下溢”,当成机器零处理。
绝对值过大的数也无法正常表示,称为“上溢”。
不难看出:阶码长度决定数据范围,尾数长度决定精度。
最后
以上就是粗犷小甜瓜为你收集整理的实数在计算机中的表示的全部内容,希望文章能够帮你解决实数在计算机中的表示所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复