在补码的运算中为什么符号位可以参与运算?

目录

一、为什么要引入补码? 

二、补码的思想

1. 模的概念

2. 补码的思想

二、补码表示法

1. 补码的定义

2. 由真值和原码转换为补码

三、真值、原码、补码对应图

回答标题中的问题


一、为什么要引入补码? 

引入补码表示法的目的:让符号位也作为数值的一部分直接参与运算,以简化加减运算的规则,同时又能化减为加。

众所周知,在原码的运算中,符号位是不会参加运算的。

因为其符号位不是数值的一部分,是人为约定的 0正1负。所以在原码的运算中需要将符号位与有效数值部分分开处理,也就是取数的绝对值进行运算——又称为无符号数运算——而把符号位单独处理。

在原码的加减运算中,我们需要判断操作数的绝对值大小、操作数的正负、运算结果的正负,过程十分麻烦。因此,我们引入补码表示法来简化计算。

 

二、补码的思想

在介绍补码的思想之前,先介绍一下模的概念。

1. 模的概念

模是指一个计量系统的计数范围。

一定位数的计量机器是具有计数范围的,它在计满后会产生溢出,又从头开始计数。如过去计量粮食用的斗、时钟等。

计算机也可以看成一个计量机器,因为计算机的字长是定长的,即存储和处理的位数是有限的,因此它也有一个计量范围,即存在一个模。 

如:时钟的计量范围是 0~11,模 = 12;表示 n 位的计算机计量范围是 0~2^n-1,模 = 2^n 。

模实质上是计量器产生溢出的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。

 

2. 补码的思想

类比时钟系统:

时钟以12为一个计数循环,在有模运算中称为以12为模。

假设当前时针指向8点,而准确时间是6点,调整时间可有以下两种拨法:

  • 倒拨2小时,即 8-2=6
  • 顺拨10小时,即 8+10=6+12=6

因为在以12为模的系统里,减2和加10效果是相同的,所以凡是减2运算,都可以用加10运算来代替。由此,我们得到启发:在有模运算中,一个负数可以用一个与它互为补码的正数来代替 —— 正、负数之间的互补性映像 —— 从而实现化减为加。

 

应用于计算机中:

对于计算机,其概念和方法完全一样。假设有一个8位计算机,它所能表示的最大数是11111111。若此时再加1成100000000,但因只有8位,最高位1自然丢失 —— 相当于丢失一个模 —— 又回到了00000000,从头开始计数。由于2^8是使其产生溢出的量,所以8位二进制系统的模为2^8。

在这样的系统中可以将减法问题转化成加法问题,只需把减数用相应的补数表示即可。把补数应用到计算机对数的处理上,就是补码。 

 

二、补码表示法

1. 补码的定义

(1)补码的统一定义式

 

这是一个对正负数都适用的统一定义式,由它可以推导出定点小数与定点整数的补码定义如下。

(2)定点小数的补码定义式

根据统一定义式,我们得到了定点小数的补码形式。通过计算,我们易得负数的补码的符号位为 1 。由此可知,符号位实际上也是一个有效数值位,只不过它恰好可以指示真值的正负罢了。

(3)定点整数的补码定义式

 

  • 对于正数,当机器数字长超出有效数值的位数时,高位补 0
  • 对于负数,当机器数字长超出有效数值的位数时,高位补 1

 

2. 由真值和原码转换为补码

虽然可以根据补码定义式由真值求得补码,但只要比较原码与补码之间的形式上的差异,就可以找到几种更简便、实用的方法。

(1)正数的补码表示与原码相同

(2)负数原码转换为负数补码的方法之一

符号位保持为 1 不变,其余各位先变反,然后在末位加 1 。简称变反加一。

注意:通常将除符号位外的有效数值部分称为尾数。

(3)负数原码转换为负数补码的方法之二

符号位保持为 1 不变,尾数部分自低位向高位,第一个 1 及其以前的各低位 0 都保持不变,以后的各高位则按位取反。

这两种方法获得的结果与根据补码定义式所得的结果是一致的,但更简便,可作为逻辑实现的依据。计算机中更多地采用方法一实现求补,即用寄存器的反相输出,通过加法器在末位加 1,从而可并行地实现求补。

 

三、真值、原码、补码对应图

表格版:

 

  • 在原码表示中,数值0有+0和+0两种表示形式
  • 在补码表示中,数值0只有一种表示形式

原码小数负数域:-1<X<=0

补码小数负数域:-1<=X<0

 

数轴版:

 

负数补码的表示范围比原码稍宽一点,即多一种组合。

可以进一步看出:负数补码表示的实质是将负数映射到正数域,因而可实现化减为加,达到简化计算的目的。

 


回答标题中的问题

在补码表示中仍以最高位作为符号位,即0正1负,这点与原码相同。但补码的符号值是由补码定义式计算而得,它是数值的一部分,可以与尾数一起直接参与运算,不需要单独处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值