真值 机器码 原码 反码 补码

3 篇文章 0 订阅
在计算机中,数都是以补码的形式存在,运算也都是以补码进行运算。补码有两个优点:一个是能够计算减法,另外一个就是统一正零和负零。

 二进制数与十进制数一样有正负之分。在计算机中,常采用数的符号和数值一起编码的方法来表示数据。常用的有原码、反码、补码、移码等。这几种表示法都将数据的符号数码化。为了区分一般书写时表示的数和机器中编码表示的数,我们称前者为真值,后者为机器数或机器码。

1. 原码表示法

原码表示法是一种比较直观的表示方法,其符号位表示该数的符号,正用“0”表示,负用“1”表示;而数值部分仍保留着其真值的特征。

定点小数的原码形式为 x. xx… xn ,则原码表示的定义是:

[]
{
       1 0

1-=1+|| 0-1

式中[]是机器数,是真值

例如,=+0.1001,则[]=0.1001

   x=-0.1001,则[]=1.1001

定点整数的原码形式为 x0 xx… xn,则原码表示的定义是:

[]
{
        2n 0

2n=2n+|| 0-2n

原码表示法有两个特点:

零的表示有“+ 0”和“- 0”之分,故有两种形式:

[+ 0] = 0.000…0

[- 0] = 1.000…0

符号位 x0 的取值由下式决定:

0

{
0        0

0

原码表示法的优点是比较直观、简单易懂,但它的最大缺点是加法运算复杂。这是因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时,还要比较绝对值的大小,然后减去小数,最后还要给结果选择恰当的符号。显然,利用原码作加减法运算是不太方便的。为了解决这些矛盾,人们找到了补码表示法。

2. 补码表示法

由于计算机的运算受一定字长的限制,属于有模运算,所以,在计算机中可以使用补码进行计算。在定点小数机器中数最大不超过1,也就是负的小数对“1”的补码是等价的。但实际上,负数的符号位还有一个“1”,要把它看成数的一部分,所以要对2求补码,也就是以2为模数。

定点小数的补码形式为x. xx… xn ,则补码表示的定义是:

[]
{
       1 0

2+=2-|| 0-1

(mod 2)

对于0,在补码情况下只有一种表示形式,即

[+ 0] = [- 0] = 0.000…0

对于定点整数 x0 xx… xn,补码表示的定义是:

[]
{
         2n 0

2n+1+=2n+1-|| 0-2n

(mod 2n+1)

采用补码表示法进行减法运算就比原码方便多了。因为不论数是正还是负,机器总是做加法,减法运算可变成加法运算。但根据补码定义,正数的补码与原码形式相同,而求负数的补码要减去|x|。为了用加法代替减法,结果还得在求补码时作一次减法,这显然是不方便的。从下面介绍的反码表示法中可以获得求负数补码的简便方法,解决负数的求补问题。

3. 反码表示方法

反码表示法中,符号的表示法与原码相同。正数的反码与正数的原码形式相同;负数的反码符号位为1,数值部分通过将负数原码的数值部分各位取反(0变1,1变0)得到。

定点小数的反码形式为x. xx… xn ,则反码表示的定义是: 

[]
{
      1 0

(2-2-n)+ 0-1

对于0,在反码情况下只有两种表示形式,即

[+ 0] = 0.000…0

[- 0] = 1.111…1

对于定点整数 x0 xx… xn ,反码表示的定义是:

[]
{
         2n 0

(2n+1-1)+x       0-2n

我们分别比较小数与整数的反码与补码的公式可得到:

[ x]补 = [x]反 + 2 -n         (0 > x ≥ -1)

[ x]补 = [ x]反 + 1         (0 > x ≥ -2 -n)

这就是通过反码求补码的重要公式。这两个公式告诉我们,若要一个负数变补码,其方法是符号位置 1,其余各位取反,然后在最末位上加 1 

4. 移码表示法

移码通常用于表示浮点数的阶码。阶码是个n位的整数,假定定点整数移码形式为x0 xx… xn 时,移码的定义是:

[]=2n  2n-2n

由移码的定义式可知,对于同一个整数,其移码与其补码数值位完全相同,而符号位正好相反。

在上面所述的数据四种机器表示法中,移码表示法主要用于表示浮点数的阶码。由于补码表示对加减运算十分方便,因此目前机器中广泛采用补码表示法。在这类机器中,数用补码表示,补码存储,补码运算。也有些机器,数用原码进行存储和传送,运算时改用补码。还有些机器在做加减法时用补码运算,在作乘法时用原码运算。


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值