定点数的运算(移位、原码和补码的加减乘除、溢出概念和判别方法)
文章目录
1.定点数移位运算
- 移位运算:根据操作对象不同分为算术移位和逻辑移位
- 算术移位:有符号数的移位
- 逻辑移位:操作对象是逻辑代码,可视为无符号数
1.1 算术运算
1.2 逻辑移位
- 移位规则:左移右移都是添0
1.3 循环移位
- 循环移位:分为带进位(CF)和不带进位的循环移位
- 循环移位特点:移出的数据又被移入到数据中
- 循环移位的应用:特别适合将数据的低字节和高子节数据互换
- 移位规则见图:
2.定点数加减法运算
2.1 原码加减
加法
:绝对值相加,符号位不变- 减法:绝对值大的减绝对值小的数,结果的符号位与绝对值大的数相同
- 这里的加法运算,其实当两个数符号位不同时就按减法规则算
注意
:运算时超出字长,则左边溢出位丢掉
2.2 补码加减
3.符号扩展
- 符号扩展:有时需要把两种不同位数的数相加,那么就需要统一他们的位数,比如8位和16位数相加,要想得到正确的结果,必须把8位数转换成16位数形式
3.1 正数符号扩展
- 原码=补码=反码:比如8位转16位:+12(10) = 0000 1100 , 转换成16位则为:0000 0000 0000 1100
- 符号位为0,附加为都用0补充
3.2 负数符号扩展
- 比如8位转16位:-12 (10) = 1000 1100
原码:扩展方法与正数符号扩展相同,只不过最高位符号位变为1, 1000 0000 0000 1100
补码:附加位补充1,符号位为1,1111 1111 1111 1100
反码:附加位补充1,符号位为1,1111 1111 1111 1100
4.溢出概念和判别方法
- 溢出:指参加运算的两个数,相加或相减,运算结果超过了机器字长所能表示的范围
- 正溢出:运算结果
大于
机器字长所能表示的最大正数
- 负溢出:运算结果
小于
机器字长所能表示的最小负数
4.1 采用一位符号位
4.2 采用双符号位
- 采用双符号位比如 S1S2,S1S2相同则不溢出;S1S2不同则溢出,此时最高位代表正确的符号
- ① S1S2 = 00:结果为正数,无溢出
- ② S1S2 = 01:结果正溢出
- ③ S1S2 = 10:结果负溢出
- ④ S1S2 = 11:结果为负数,无溢出
5.定点数乘法运算
5.1 原码一位乘法
5.2 补码一位乘法(Booth算法)
- 一种有符号的乘法,采取相加和相减操作计算补码数据的乘积。
- 运算规则:
- 符号位参与运算,运算的数均以补码表示
- 被乘数一般取双符号位参与运算,部分积取双符号位,初值为0,乘数可取单符号位
- 乘数末位增设附加位yn+1,初值为0
- 根据(yn,yn+1)的取值来确定操作,见下表规则
- 有符号数,移位按补码右移算术移位规则进行,右移补充1,左移补充0
- 按上诉步骤进行n+1次步骤,第n+1次不移位。累加n+1次,移位n次
5.3 乘法运算总结表
6.定点数除法运算
- 在计算机中,除法运算可转换成
“累加-左移”(逻辑左移)
6.1 原码除法运算(不恢复余数法)
6.2 补码除法运算(加减交替法)
- 符号位与数值位一起参加运算
- 除法第一步根据被除数和除数的符号决定是做加法还是减法
- 上商的原则根据余数和除数的符号位共同决定,同号上1,异号上0,简单规律就是,够减上1,不够减上0
- 最后一步商恒置为‘1’
- 运算规则:
- 符号位参与运算,除数、被除数、商和余数都用补码表示
- 被除数和除数同号,则被除数减去除数;若被除数和除数异号,则被除数加上除数
- 若余数和除数同号,则上商1,余数左移一位; 若余数和除数异号,则上商0,余数左移一位加上除数
- 重复执行上一步骤n次
- 若对商的精度无特殊要求,最后一位商恒置为1