计算机组成原理——第二章(4)

上一小节我们讲了无符号整数的表示和运算,这次我们讲一下带符号整数的表示和运算

带符号整数的表示和运算_原反补

1.带符号整数的表示

其实很简单,我们在第一位用0/1来区分是正数还是负数,比如8bit的寄存器,第一位是符号位,0正1负,后面7位是数值位,所以对于8bit的寄存器来说,能存最小的数应该是11111111=-127,能存最大的数应该是01111111=127

 几个注意的点:

1.如果告诉你机器的字长,x=-19,你应该书写[x]原=1,0010011;如果没有指明机器的字长,也可以书写为[x]原=1,10011

2.真值0有两种形式:+0和-0,[+0]原=0,0000000 ;     [-0]原=1,0000000

2.带符号整数的加法

上一个小结我们讲过无符号整数的加法运算,同学们来回顾一下,无符号整数的加法是怎么做的?忘记的同学可以看我上一篇文章。那带符号整数的加法运算可以和无符号一样吗,我们来试一下

很明显正确结果应该是0,但是得到的却是1,0100110,很明显是错误的,那我们对于有符号的应该怎么运算呢?直接告诉答案,将两个数从原码转变成补码,补码按位相加,之后再转变成原码就是最终答案

我们给个例子:

这里有个问题:-19的补码为什么是11101101? 各位同学还记得原码是怎么转补码的吗?上个文章我们讲过无符号的转变,先是将原码全部取反后+1就是反码;那有符号也是这样的吗?

对于正数来说,原码、反码、补码都是相同的

 对于负数来说,原码转反码,符号位不变,数值位取反得到反码,再末位+1得到补码

有一个注意的点,原码到反码和反码到原码的操作过程是一样的,反码到补码是末位1,那补码到反码按道理来说是末位-1,可以是可以,不过做减法不太好方便运算,下面介绍一下另一种方法

1.首先将补码转原码,从右到左找到第一个1,然后将前面的数值位全部取反(注意是数值位,不要把符号位也取反了!!!)

2.得到原码之后将数值位全部取反

这是咸鱼老师教我的,但是我感觉如果单单是想补码转反码的话,有点多此一举,因为有些数值位连续取反了两次,也就是没变,所以我自己归纳创新了一下:

1.补码转原码(原码转补码):从右到左找到第一个1,然后将前面的数值位全部取反

2.补码转反码:从右到左找到第一个1,然后将1后面的数值位全部取反(包括找到的第一个1)

 OK介绍到这里我们才只是说了原码转补码,还记得我们为什么要原码转补码吗?

目的就是为了转补码后两个补码相加,再转原码得到答案,所以现在大家再看这张图应该能理解了吧

注意:下图两个补码相加得到的是100000000,但是它是8bit寄存器,只能存8位,所以最前面的1就丢弃掉

 再给一个例子练练手,大家可以动手算一下,A=-19  B=-19,A+B得到的补码是什么?A+B的答案是什么?

 3.带符号整数的减法

之前我们讲过,减法运算造价比加法更高,所以我们需要把减法转变成加法,无符号减法我们讲过,我们首先把减数全部位取反后末位+1,得到补码,然后按位相加就好了。其实有符号整数补码的减法运算也是一样的。

将减数补码的全部位取反后末位+1,然后按位相加得到答案的补码,然后补码转原码就是答案

4.小结

通过这一小节,我们需要熟练掌握有符号数原反补之间的转化,所有带符号数加减法之前都需要变成补码这个中转轴,所以我们要熟练掌握补码之间的加减法运算

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值