计算机组织与体系结构——补码与模与浮点数的规格化
简单介绍一下模与补码的关系,通过探究补码计算的原理加深印象和理解,借此顺便分析一下浮点数的规格化中对尾数的要求(即怎样才算规格化的浮点数)摘要部分
模2与模4补码
首先明确一点,通常我们所见到的就是模2,而模4最常见的使用即双符号位,在解题时,一般理解为双符号位即可。
下面简单分析一下模的概念,以时钟为例,时钟是最方便我们理解的模12的一个例子,即在时钟中,1
和1(+12)
所表示的东西是等价的,事实上和任意加上12n
的数都是等价的。
在计算机中,补码的出现很大程度上是为了表示负数,我们来看-36
这个数,其绝对值的二进制是100100
,假设现在在8位的计算机中表示,即0010 0100
,负的相当于拿0
减去它,根据我们小学数学的思想,不够减,向高位借1,如下所示:
1 0000 0000
-0 0010 0100
————————————————————
0 1101 1100
而熟悉补码计算方法的同学肯定知道取反加一之后的结果:
1 010 0100-->1 101 1011-->1 101 1100
很容易发现结果一致,即所谓补码是在找一个与原来的负数等价的一个数,而找的方法就是加上模,一个n位的数就要加上2^8;即可得到对应的补码;
浮点数规格化
下面简单分析一道题,加深对规格化的理解:
分析之前首先弄清楚规格化的意义:
在科学计数法中:0.0034*10^3 这种形式显然不符合规范,
其原因在于位数中开头的无效数字太多,占位,可能会影响对精度的要求;
在浮点数中也是同理,位数的符号位不算,以正数为例,
要求第一个数必须是有效字符,由于只有0/1,因此只能是1。
这是课本上的描述:
负数的原码以及正数的补码同里;
至于负数的补码,其实用同样的思想去解释会有一点问题;
比如:原码 1.1000;显然符合要求,但是把它换成补码
补码 1.1000;显然不符合课本要求
所以这里不必深究,只是一个人为的规定,便于计算机去计算
回到题,类比一下,由于是基8,即对正数而言,位数前三位不全为0即规格化,对负数套用基2的结论,不全为1,即可;答案就很清楚了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 不听话的兔子君!