摘要部分

简单介绍一下模与补码的关系,通过探究补码计算的原理加深印象和理解,借此顺便分析一下浮点数的规格化中对尾数的要求(即怎样才算规格化的浮点数)

模2与模4补码

  首先明确一点,通常我们所见到的就是模2,而模4最常见的使用即双符号位,在解题时,一般理解为双符号位即可。
  下面简单分析一下模的概念,以时钟为例,时钟是最方便我们理解的模12的一个例子,即在时钟中,11(+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,即可;答案就很清楚了。