本文主要是介绍定点加减法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、原码加减法
二、补码的加减运算
1、补码加法
2、补码减法
3、补码加减运算规则
4、符号扩展
定点数的加法和减法包括原码、补码和反码3种带符号数的加减运算,其中补码加减运算实现起来最方便。
一、原码加减法
对两个数进行加减运算时,计算机的实际操作时加还是减,不仅取决于指令的操作码,还取决于两个操作数的符号。
当原码加减运算时,符号位不参加运算,只有两数绝对值参加运算。
首先要判断参加运算的两个操作符的符号,再根据要求决定进行相加还是相减操作,最后还要根据两个操作数绝对值大小决定结果的符号,整个过程时比较复杂的。
在加计算机中,通常只设置加法器而不设置减法器,减法运算将转换为加法运算来实现。
原码加减的运算规则如下:(计算机算法,将符号位也一并考虑)
(1)参加运算的操作符取其绝对值
(2)若做加法运算,则将两数直接相加;若做减法运算,则将减数先变一次补,再进行加法操作
(3)运算之后,可能有两种请情况
- 有进位,结果为正,即得到正确的结果
- 五无进位,结果未负,则应再变一次补,才能得到正确的结果
(4)结果把符号位加上
通常,把运算之前的变补称为前变补,运算之后的变补称为后变补
变补是指有的二进制数各位(包括符号位)变反后最低为加一
二、补码的加减运算
补码的加减运算要比原码的加减运算要简单些。
1、补码加法
两个补码表示的数相加,符号位参与运算,且两数和的补码等于两数的补码之和,即:
两个机器数相加的补码可以先通过分别对两个机器数求补码,然后再相加得到,在采用补码形式表示时,进行加法运算可以把符号位和数值位一起进行运算(若符号位有进位,导致了益出,则直接舍弃),结果为两数之和的补码形式
【例】:求两个十进制数的和 35+(-18)。(用8位来表示)
35的原码:0010 0011。
-18的原码:1001 0010。
因为35是正数,补码与原码完全一致,但是-18是负数,补码需要转换。
35的补码:00100011。
-18的补码:由原码除符号位外取反,再在最低位+1,得到结果是11101110。这时都是补码,运算规则等同于无符号二进制加法。
00100011
11101110
100010001-
--因为前面规定了字长是8位,这里出现了9位, 所以最高位舍弃
舍弃后,结果为00010001, 转换成十进制是:17。结果正确!(超出字长部分直接舍弃)
2、补码减法
即,补码的减法也可以借用加法器来实现
将称为的机器负数,由求的过程称为对变补(求补)。
注意:区分 “某数的补码”、“变补”
- 一个负数由原码表示转换成补码表示时,符号位是不变的,仅对数值位各位变反,末位加“1”
- 变补,不论该数是正还是负,一律连同符号位一起一起变反(所有二进制位一起变反),末位加“1”.
- Y的补码表示的真值如果是正数,则变补后的Y所表示的真值变为负数,反之亦然
3、补码加减运算规则
补码加减运算规则如下:
(1)参加运算的两个操作数均用补码表示
(2)符号位作为数的一部分参加运算
(3)若做加法运算,则两数直接相加;若做减法运算,则将被减数与减数的机器负数相加
(4)运算结果仍用补码表示
4、符号扩展
在计算机算数运算中,有时必须将采用给定位数表示的数转换成具有更多位数的某种表示形式。
例如,某个程序需要将一个8位数与另一个32位数相加,想要得到正确的结果,在进行运算之前,需要把8位数转换成32位形式,这个过程就成为“符号扩展”。
- 对于正数的符号扩展,原有形式的符号位移动到新形式的符号位上,表示形式的所有附加位都用“0”进行填充
- 对于负数的符号扩展,原码表示负数的符号扩展与正数相同,但此时的符号位为“1”;补码表示负数的符号扩展:原有形式的符号为移动到新形式的符号位上,新表示形式的所有附加位都用“1”进行填充
这篇关于定点加减法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!