首页 > 其他分享 >【计算机组成原理】2.2.3_2 无符号数的加减运算

【计算机组成原理】2.2.3_2 无符号数的加减运算

时间:2024-08-25 11:24:34浏览次数:9  
标签:运算 符号 补码 加减 加法 2.2 减法 溢出

2.2.3_2 无符号数的加减运算

00:00

各位同学大家好,在这个视频中我们会探讨无符号数的加减运算用计算机是怎么实现的。在王道书当中重点探讨了有符号数补码的加减运算怎么实现。对于无符号数的加减运算,王道书当中并没有深入的探讨。所以这个视频是对王道书的一个补充。大家可以参考这个视频配套的课件,在这个视频中我们首先会探讨无符号数的加减运算如何实现,其次我们还要关注无符号数加减运算的溢出判断。

00:38

好,首先我们回顾一下带符号数的加减运算是怎么实现的。在计算机内部所有的带符号数在进行加减运算之前,一定会先转换成补码的形式,用补码来进行加和减。补码的加法运算很简单,我们只需要从第低位到高位逐位的相加,就可以得到最终的一个加和结果。进行补码加法的时候,符号位是正常参与运算的。好,这是带符号数补码的加法。

01:15

那再复习一下带符号数补码的减法,也很简单,A减B等价于A加上负B,基于补码的特性,我们要根据B的补码求出负B的补码。很简单,只需要把B的补码全部位按位取反,末位加一就可以。用这样的方法得到负B的补码之后,A减B这个减法运算就可以转变成A加上负B,这两个运算是等价的,那这样我们就把减法转变成了与之等价的加法运算。加法运算规则刚刚说过,从最低位开始逐位相加,并且更低位有可能向更高位产生进位。符号位同样参与运算就可以。好,这就是补码的减法运算。

02:11

接下来我们要探讨无符号数的加法和减法运算。事实上底层的运算规则和带符号数的加法减法是一模一样的。来看这样的一个例子,A和B分别是99和9,它们对应的二进制分别是这样的两个数。我们把它扩展为8比特的无符号数。接下来运算A加上B加法运算,很简单,和补码是一样的,那从最低位开始依次往前,相应的这些比特位相加就可以得到A加B的一个结果。99加9应该等于108,用8比特的无符号数表示就刚好是这样的一个值。那不熟悉的同学可以暂停来验算一下。

03:02

好,这是加法运算规则,很简单,接下来看无符号数的减法运算计算机是怎么实现的。对于计算机硬件来说,无符号数的减法和带符号数补码的减法运算处理的逻辑是一样的。A是被减数,B是减数。那计算机的做法是首先把减数B全部位按位取反,末位加1,用这样的方式得到减数B的补数。那这个处理逻辑是不是和补码的减法是一模一样的,对减数B进行这样的处理之后,就可以把减法转变成与之等价的加法。接下来按位相加就可以。好,来解释一下为什么这么做,可以把减法转变成等价的加法。

03:59

之前我们介绍过补数的概念。对于8比特的无符号数来说,由于8比特的寄存器只能表示0到255这个范围的值,因此8比特寄存器天然的实现了模256这样的一个运算,也就是模2的8次方。那么在模256这个条件之下,B的补数应该等于多少呢?之前我们介绍过补数的定义,在模256的情况下,B和B的补数相加应该刚好等于256。那B的值等于9,9,加上247刚好等于256,因此247就是B在模256的条件下它的一个补数,所以A减B等价于A加上B的一个补数,也就是等价于A加上247。

05:11

那刚才我们说把B全部位按位取反,末位加1,经过这样的处理就可以得到B的补数。为什么这么做可以得到B的补数呢?好,首先我们看第一步,把B全部位按位取反,我们把B全部为按位取反,得到的这个数记为C,那么显然B加上C刚好等于八个1,也就是等于255。那如果在B加C的基础上再加一个一,那刚好就可以等于256。而刚才我们说B的补数加上B刚好等于模数256,因此C加上一这个值和B刚好就是互补的关系,所以C加1就是B的一个补数。

06:11

那还记得C怎么来的吗?C是把B全部位按位取反,对吧?因此把B全部位按位取反,末位再加上一个一,刚好就可以得到B的一个补数。这样的话我们就可以用A加上B的补数去等价A减B的一个效果。所以接下来减法运算就变成了加法运算。我们只需要按加法的规则,从最低位开始逐位相加,并且注意向更高位产生进位,逐步的往前加就可以,最终就可以得到A减B的运算结果,等于90,大家可以自己验证一下。

06:56

好,因此可以看到无符号数的减法运算,计算机的处理方法和有符号数补码的减法运算是一模一样的。首先把减数全部位按位取反,末位加一得到减数的补数,然后把减法转变成等价的加法。再回来看一下刚才提到的带符号数补码的减法运算,一模一样对吧?把减数全部位按位取反,末位加1,这样就可以把减法转变成等价的加法,逐位的相加就可以。好,因此对于计算机底层的硬件来说,无符号数的加法运算和带符号数补码的加法运算实现的逻辑是一样的,同样的无符号数的减法运算和带符号数补码的减法运算实现的逻辑也是一样的。

07:56

接下来我们还需要探讨无符号数的加减法运算怎么去判断溢出。首先介绍一种手算判断溢出的方法。在考试当中有可能会让你判断两个无符号数的加法或者减法是否发生溢出。那么手算判断的方法很简单,首先需要确定无符号数总共有多少个比特,N个比特无符号数可以表示的范围就是0到2的N次方减1,比如8比特无符号数,它的表示范围就是0到255。

08:31

如果题目让你判断某一个加法或者减法是否发生溢出,大家只需要用十进制带进去算一下就可以。比如说两个八比特无符号数,127减掉128会不会发生溢出呢?显然是会发生溢出的,因为这个相减的值等于负一,而负一已经超出了0到255这个范围,因此两个八比特无符号相减,127减128肯定会发生溢出。那类似的两个8比特无符号数,200加上100,最终手算的结果等于300,那300已经超出了0到255这个范围,所以两个8比特无符号数相加,200加100肯定也会发生溢出。好,所以考试的时候你可以带入十进制的值,用手算的方式去判断这个无符号数的加减法有没有发生溢出。重点关注无符号数的合法表示范围就可以。

09:38

好,这是考试做题的一个小技巧。对于计算机硬件来说,判断溢出的方法就不一样了。当两个无符号数进行加法运算的时候,我们说两个无符号数会从最低位开始逐位相加,从最低位加到最高位。那最高位相加之后有可能会产生进位。如果进位等于一,那么就说明发生了溢出,否则说明没有溢出。

10:07

好,来看加法发生溢出的例子,两个8比特无符号数A和B分别等于99和157,那这两个数相加正确的值应该是256,但是对于8比特无符号数来说,它的合法表示范围应该是0到255,所以这个加法运算肯定会发生溢出。那对于计算机硬件来说,它会逐位的进行相加,一加一等位等于0,往更高位进一,第二位本位和等于零往更高位进一,第三位本位和等于零往更高位进一,第四位同样本位和等于零往更高位进一,那接下来的每一位都是本位和等于零往更高位进一个,一直到最高的这一位,本位和等于0加1再加上来自更低位的进位一,那本位和等于零往更高位再进一个一。所以由于最高这一位往更高位产生了一个进位一,因此可以判断这个加法运算发生了溢出,那这就是计算机硬件判断无符号数加法是否发生溢出的一个逻辑。

11:30

再回到之前这个例子,99加上9等于108,在这个例子当中,加法运算并没有发生溢出,大家可以自己从最低位往最高位依次相加,自己验证一下,最高位向更高位的进位应该是等于0,在这种情况下说明加法运算没有发生溢出。好,这就是无符号数加法运算判断溢出的逻辑,关注最高位产生的进位是否等于1,等于1就发生溢出,不等于1就没有溢出。

12:05

好,接下来再看无符号数减法判断溢出的逻辑。之前我们说过,无符号数的减法最终肯定会被转变成与之等价的加法运算。那么转变成等价的加法运算之后,判断溢出的方法同样是要关注最高位产生的进位。当最高位产生的进位等于0的时候,说明发生溢出,否则没有溢出。好,来看一个减法发生溢出的例子,A等于99,B等于100两个数相减正确的值应该等于-1,肯定没办法用8比特的无符号数来表,所以这个减法运算一定会发生溢出,这是我们手算判断的逻辑。

12:52

对于计算机来说,这个减法运算它首先会把减数B全部位按位取反,末尾加一得到减数B的补数。接下来减法变加法逐位的相加。逐位相加的过程我们这儿就不再赘述,大家可以自己验证一下。最高位相加之后,往更高位产生的进位应该等于0,刚刚我们说在减法运算当中,如果最高位向更高位产生的进位等于0的时候,说明发生溢出,此时得到的这八比特运算结果是错误的。好,这是减法发生溢出的例子。

13:38

现在我们再回到前面这个没有发生溢出的例子,A等于99,B等于9,两个数相减A减B正确的值应该是90,那显然90没有超过8比特无符号数可以表示的合法范围,所以我们手算判断这个减法运算肯定没有发生溢出。那对于计算机来说,首先它会把减数B全部位按位取反,末位加一得到B的补数,然后减法变加法,从最低位开始逐位相加,直到加到最高高位。大家可以自己手算验证一下,最高位相加之后会往更高位产生一个进位一。刚刚我们说在减法运算当中,如果最高位产生的进位等于一,那么说明这个减法运算没有发生溢出。好,这就是计算机判断无符号数减法是否溢出的一个逻辑。

14:40

好的,在这个视频中我们介绍了无符号数加减运算的实现原理以及判断溢出的方法。我们需要重点关注无符号数减法的实现原理,对于计算机硬件来说,无符号数的减法和有符号数补码的减法实现的原理是一模一样的,都是让被减数不变,让减数全部位按位取反,末位加1,然后减法变加法,

15:10

好,另外我们介绍了无符号数加减运算判断溢出的逻辑。当进行加法运算的时候,需要关注最高位产生的进位是否等于1,如果等于1,那么说明发生溢出,否则没有溢出。而无符号数的减法运算判断溢出的逻辑刚好相反,当最高位产生的进位等于0的时候,说明发生溢出,否则没有溢出。

15:39

在这个视频中我们也介绍了手算判断溢出的方法。在考试当中判断两个N比特无符号数是否发生溢出,我们可以直接代入十进制数去计算一下,两个数相加或者相减是否超出了这N比特无符号数可以表示的合法范围。如果超出了合法范围,那么一定会发生溢出,否则就是没有溢出。好的,以上就是这个小节的全部内容。

标签:运算,符号,补码,加减,加法,2.2,减法,溢出
From: https://blog.csdn.net/m0_51768219/article/details/141527158

相关文章

  • 运算符
    运算符运算符类型符号算数运算符+,-,*,/,%,++,--赋值运算符=关系运算符>,<,>=,<=,==,!=,instanceof逻辑运算符&&,||,!注意在int类型/int类型时及时强制转换类型小技巧ctr+D复制当前行到下一行幂运算很多运算我们会使用工具类 doublepow=Math.pow......
  • Shell脚本学习_运算符
    目录一、算数运算符1、expr命令:2、算数运算符介绍:3、使用(()) 进行运算: 4、bc命令:1.bc中互动式的数学运算:2.非互动式的管道运算:3.非互动式的输入重定向运算:二、比较运算符 1、整数比较运算符:2、字符串比较运算符:3、[[]] 和 []的区别:三、布尔运算......
  • C++ //练习 19.23 为你的Token类添加移动构造函数和移动赋值运算符。
    C++Primer(第5版)练习19.23练习19.23为你的Token类添加移动构造函数和移动赋值运算符。环境:LinuxUbuntu(云服务器)工具:vim 代码块classToken{ public: Token():tok(INT),ival(0){} Token(constToken&t):tok(t.tok){copyUnion(t);} Token&operator=(......
  • 【计算机组成原理】2.2.2 定点数的移位运算
    2.2.2定点数的移位运算00:00这一小节中我们来学习定点数的移位运算怎么实现。移位运算又可以进一步的划分为算术移位、逻辑移位还有循环移位。我们会按从上至下的顺序依次讲解。00:13好,首先来认识一下什么叫做算术移位。我们从大家熟悉的十进制数出发,假设这儿有这样的......
  • 运算符 类定义 Math类的使用 数组的使用
    1.基本的算术运算符5个:+ - * / %都是双目运算符(两个操作数),其中%要求的两个操作数必须为整数。2.自增、自减运算符++ --注意作为前缀和后缀的用法不同.3.表达式计算中的数据类型转换(1)自动类型转换:当参与运算的两个操作数类型不同时,先把低类型的数据转换为高类......
  • Python 教程(三):Python运算符合集
    Python中常用的一些运算符类型算术运算符+:加法-:减法*:乘法/:除法(结果为浮点数)%:取模(即除法余数)**:幂(指数)//:整除(结果为商的整数部分)示例代码: a=10b=3print("加法:",a+b)#输出13print("减法:",a-b)#输出7print("乘法:",a*b)#输出3......
  • 位运算的常见操作与好处
    目录位运算的具体操作按位与(&):按位或(|):按位异或(^):按位取反(~):左移(<<):右移(>>):位运算的优势位运算的具体操作按位与(&):操作:对两个操作数的每一位进行与操作,结果位仅在两个对应位都为1时为1。示例:inta=12;//二进制:00001100intb=7;//二进......
  • 线段树(2)——懒惰标记Lazy Tag(单运算)及例题
    上一篇文章我们讲了线段树的最基本的操作。如果有一种操作叫做区间加法呢?这个时候显然可以依次单点修改,但是时间复杂度太高了。所以可以考虑优化,由于思考过程可能很长,此处直接引入懒惰标记。懒惰标记就是在对一颗树的所有节点进行某种统一操作时,只对根节点做一个标记表示它的子树......
  • 运算符
    1:运算对常量和变量进行操作的过程称为运算。2:运算符对常量和变量进行操作的符号称为运算符3:操作数参与运算的数据称为操作数4:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。注意事项:一个表达式最终......
  • Adobe Substance 3D Sampler v4.2.2 下载及安装教程(3D材质管理软件)
    前言Substance3DSampler简称“Sa”是一款由Adobe新推出的3D真实材质贴图制作软件。允许用户通过调整和混合现有材料,或通过扫描(单个或多个图像)中提取新材料来创建和迭代材料集合,从而轻松将真实的图片转换为具有真实感的表面或HDR环境,为用户创作出更为丰富的材质贴图。一、下载......