
补码运算为什么要舍去进位(补码取反就是偏移码)
- 科技
- 2023-08-14
- 6

各位老铁们好,相信很多人对补码运算为什么要舍去进位都不是特别的了解,因此呢,今天就来为大家分享下关于补码运算为什么要舍去进位以及补码取反就是偏移码的问题知识,还望可以帮...
各位老铁们好,相信很多人对补码运算为什么要舍去进位都不是特别的了解,因此呢,今天就来为大家分享下关于补码运算为什么要舍去进位以及补码取反就是偏移码的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
什么是补码加减运算溢出判别溢出有哪几种方法并我说明工作原理
1)补码加法运算:
整数:[A]补+[B]补=[A+B]补(模为2的n+1次方,因为可能会有进位)
小数:[A]补+[B]补=[A+B]补(模为2,因为A和B都小于1)
(2)补码减法运算:
因为A-B=A+(-B),所以减法可以变通为加法进行计算。
整数:[A-B]补=[A]补+[-B]补(模为2的n+1次方)
小数:[A-B]补=[A]补+[-B]补(模为2)
在做补码加减法时,只需将符号位和数值部分一起参加运算,并且将符号位的进位自然丢掉就可以了。但是,当运算结果超出机器字长所能表示的数值范围,这种情况叫做溢出。
(3)判断溢出:
溢出出现的情况:正数+正数,负数+负数,正数-负数,负数-正数这四种情况,当参加运算的两个数的符号(正负)相同,而结果则与这2个数的符号不同,即为溢出。
计算机中通常将两个参与运算的数的符号位产生的进位与最高有效位(",""."后的那位)产生的进位进行异或操作(无进位即进位为0),异或结果为1,是溢出,异或结果为0,无溢出。
补码溢出怎么判断
运算的结果大于数值设备所能表示数的范围,就会产生溢出。如何判断补码溢出:可以通过最高位与次高位进位来判断:若最高数值位向符号位的进位值与符号位产生的进位输出值不相同,则表明加减运算产生了溢出。溢出现象应当作一种故障来处理,因为它使结果数发生错误
补法加法与减法的运算规则
为了简单下面用一个字节表示一个整数
-54原码10110110反码11001001补码11001010
-30原码10011110反码11100001补码11100010
反码相加
11001001+11100001->10101010+1=10101011->(取反)11010100(-84)
补码相加
11001010+11100010->10101100->(取补码)11010100(-84)
反码:一个数如果为正,则它的反码与原码相同;
一个数如果为负,则符号位为1,其余各位是对原码取反。
两个数的二进制反码求和的运算规则:
1、从低位到高位逐列进行运算;
2、0+0=1,0+1=1,1+1=0(进位1加到下一列);
3、最高位相加产生的进位,要在最后的结果加1.
补码:一个数如果为正,则它的原码、反码、补码相同;
一个数如果为负,则符号位为1,其余各位是对原码取反,然后整个数加1。
补码加减法运算法则如下:
1、参加运算操作的数都用补码表示。
2、数据的符号与数据一样参加运算。
3、求差时将负减数求补,用求和代替求差,将减法运算转化为补码的加法运算。
4、运算结果为补码。如果符号位为0,表明运算结果为正;如果符号位为1,则表明结果为负。
5、符号位的进位为模值,应该去掉。
为什么有符号乘法结果取补码
丢开教科书式的概念,想想为什么要有补码这个东西,为什么符号位会产生。
定义:
原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。
机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
如果是为了考试,死记即可。但我总想搞清楚为什么计算机里面的数要这样子表达?意义何在?-128的补码为什么是10000000?为什么补码有这么奇怪的运算规则?计算机算减法的时候都需要从源码到补码的计算吗?
思路
计算机里面,只有加法器,没有减法器,所有的减法运算,都必须用加法进行。
用补数代替原数,可把减法转变为加法。出现的进位就是模,此时的进位,就应该忽略不计。
二进制下,有多少位数参加运算,模就是在1的后面加上多少个0。
补码就是按照这个要求来定义的:正数不变,负数即用模减去绝对值。
补充解释一下“模”的概念,可以参照离散数学里面的环:
考虑时钟上时间的计算,假设现在时针指向数字3,若问“6小时前时针指向的数字是几”,则可以:
1.将时针逆时针拨动6格。
2.将时针顺时针拨动12-6=6格。
两者的结果是一样的。这里称12为“模”。
故有3时-6个小时=3时+(12-6个小时),这里可以看到将减法转换成加法的过程,即“加上模减去绝对值的差”。
所以,假设模是10,有效位数为1,当我们计算9-7的时候:
9-7=>9+(10-7)=12,去掉最高的位后,得到2,这是正确的结果。
作者的意思是说,计算机里面所有数都以补码形式保存,加减运算都是补码之间的加法运算。然后作者提出了一个我之前没听过的观点:
补数和补码的定义式里面,根本就没有什么符号位。这最高位的1、0是自然出现的,并不是由人来规定的。
的确,符号位在补码运算里面是“模”,本身并不带符号的意义。因为计算机将加法转换成加上一个“负数”,而负数又以补码的形式表现。补码比源码多一位,从这多出来的一位可以推断出原来数字的正负号,所以成为了符号位。也可
补码为什么加1
简单地说,补码就是反码加1。
计算机中为什么要使用补码呢?主要原因:1、使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃
好了,关于补码运算为什么要舍去进位和补码取反就是偏移码的问题到这里结束啦,希望可以解决您的问题哈!
本文链接:http://www.depponpd.com/ke/3221.html