DJ2-2 运算方法(二进制)

目录

一、无符号数的算术运算

1. 加法运算

2. 减法运算

二、有符号数的算术运算

1. 原码运算

2. 补码运算

三、定点数的补码加减运算

1. 基本关系式

2. 补码加减运算规则

四、溢出判断

1. 引入

2. 溢出

3. 溢出的判断方法

五、移位操作

(1)逻辑移位

(2)算术移位


二进制数的运算分类

一、无符号数的算术运算

1. 加法运算

二进制的加法运算遵循法则:0+0=0,0+1=1,1+0=1,1+1=0(有进位)

2. 减法运算

二进制的减法运算遵循法则:0-0=0,1-0=1,1-1=0,0-1=1(有借位) 

二、有符号数的算术运算

1. 原码运算

由上述例题可见,原码加减运算复杂。因为操作数取绝对值运算,所以实际操作不仅取决于操作码(是加还是减),还与操作数的正负有关,并且还可能需要对运算结果进行修正。

而补码运算相对简单,因此在计算机中基本采用补码加减法。

2. 补码运算

补码运算的特点

  • 将减法转换为加法
  • 将真值表示为补码

变补

变补方法:连同符号位变反再加一。

验证方法:分正数、负数情况讨论,直接进行转换即可。

Q:“补码的运算中符号位参与了运算” ?

在补码的运算中为什么符号位可以参与运算?_狂放不羁霸的博客-CSDN博客在补码表示中仍以最高位作为符号位,即0正1负,这点与原码相同。但补码的符号值是由补码定义式计算而得,它是数值的一部分,可以与尾数一起直接参与运算,不需要单独处理。https://blog.csdn.net/m0_64140451/article/details/127181631?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127181631%22%2C%22source%22%3A%22m0_64140451%22%7D

三、定点数的补码加减运算

操作数用补码表示,符号位参与运算,结果用补码表示。

1. 基本关系式

  • 操作码为 “加” 时,两数直接相加。
  • 操作码为 “减” 时,将减转换为加,即将减数变补后与被减数相加。

应用举例

根据基本关系式进行运算,便能得到正确的答案。

2. 补码加减运算规则

这张图说明了进行补码加减运算的流程。

四、溢出判断

1. 引入

在上述六个例子中,由于机器数长度为 5 位,并且由补码表示,因此定点整数表示范围为:-16 ~ 15,运算结果超出这个范围即为溢出。

2. 溢出

① 溢出:运算结果超出机器数的表示范围。

② 正溢:两正数相加绝对值超出允许的表示范围。

③ 负溢:两负数相加绝对值超出允许的表示范围

3. 溢出的判断方法

符号说明

在补码运算中,符号位将会参与运算。

① 判断逻辑一

溢出的标志是结果的符号 Sf 与两个操作数的符号恰好相反。

只有同号数相加才可能产生溢出,因为一正一负相加,其结果绝对值不可能超过模。

② 判断逻辑二

溢出的标志是符号位进位与尾数最高位进位不同:

  • Cf 与 C 不同时,有溢出;
  • Cf 与 C 相同时,无溢出。

③ 判断逻辑三

溢出的标志是第一符号位和第二符号位不一致。

单符号位的信息量只能表示两种可能:数为正或为负,如果发生溢出,就会使符号位的含义发生混乱。将符号位扩充为两位,就能判别是否溢出以及正确的结果符号 —— 双符号位表示法。

双符号位表示法
00正数
11负数

溢出的标志
00结果为正,无溢出
01结果为正,是正溢
10结果为负,是负溢
11结果为负,无溢出

不管结果是否有溢出,第一符号位 Sf1 始终能指示运算结果的正负。

原因:若将机器数长度扩充为 6 位,由补码表示,则定点整数表示范围为:-32 ~ 31,上述六个例子的运算结果没有超出这个范围,因此不会发生溢出,即所有运算结果都是正确的。因此,第一符号位 Sf1 始终能指示运算结果的正负。但实际上机器数长度为 4 位,所以上述结果仅作为判断溢出的工具。

采用多符号位的补码又称变形补码,它的实质是扩大了模数 M、增加了数据位的宽度。个人理解,就是扩大了定点整数表示范围,使得运算结果不会发生溢出。

五、移位操作

(1)逻辑移位

主要针对于纯二进制代码 —— 无正负和大小 —— 可能表示的是一个字符。

应用:以串行方式发送数据。

(2)算术移位

数码位置和数值发生变化, 符号位不变。

希望实现的效果:

  • 左移一位,真值乘以二;
  • 右移一位,真值除以二。

① 正数补码以及任意数原码的移位规则 

移位规则:数符不变,空位补零。

Q:为什么空位补零?

A:因为我们想达到 希望实现的效果,只有空位补零才能得到想要的结果。

  • 对于单符号位,符号位不变;
  • 对于双符号位,第一符号位不变,第二符号位参与移位。

第一符号位和第二符号位其实都是有效数值位,为了达到 希望实现的效果 才进行上述操作。

② 负数补码的移位规则

移位规则:数符不变,左移空位补零,右移空位补一。

Q:为什么左移空位补零,右移空位补一?

A:因为我们想达到 希望实现的效果,只有这样才能得到想要的结果。

  • 对于单符号位,符号位不变;
  • 对于双符号位,第一符号位不变,第二符号位参与移位。
  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值