定点数的表示和运算
原码、反码、补码表示
X
若为正整数,则原码、反码和补码相同
X
若为负数,则反码为原码除符号位外取反,补码为原码除符号位外取反加一
原码、反码、补码范围
原码和反码的表示范围一样
- 定点整数:
–(2ⁿ–1) ≤ x ≤ 2ⁿ–1
- 定点小数:
–(1–2⁻ⁿ) ≤ x ≤ 1–2⁻ⁿ
补码比原码和反码多一个最小数(补码和移码表示+0和-0一样)
- 定点整数:
–2ⁿ ≤ x ≤ 2ⁿ–1
- 定点小数:
–1 ≤ x ≤ 1–2⁻ⁿ
移码和与补码只差一个符号位,对一个数补码的符号位取反得到该数的移码,
[X]移=2ⁿ+X
- 取值范围和补码一样
定点数的移位运算
逻辑移位(针对无符号数)
逻辑移位不管是左移还是右移,都添0。
算术移位(针对有符号数)
对于正数,由于原码,补码,反码与真值相同,因此移位后出现的空位均以0添之。
对于负数,由于原码、补码、反码的表示形式不同,因此当机器数移位时,对其空位的添补规则也不同。
定点数的加减运算
原码的加减运算
对于加法,符号位不参与运算,符号在数值位运算结束后确定。
对于减法,比较两数的绝对值,并以较大绝对值减去较小绝对值。符号位不参与运算,符号在数值位运算结束后确定。
反码的加法运算
反码加法在最高位进位而丢掉高位时,必须在最低位补上+1
。
补码的加减运算
对于加法,[X+Y]补 = [X]补 + [Y]补
对于减法,[X-Y]补 = [X]补 + [-Y]补,其中[Y]补的各位(包括符号位)均取反,然后最低位+1,可以得到[-Y]补
- 符号位与数值位一起参与运算
溢出的判别方法
符号比对法
只有加法同号运算或者减法异号运算才会发生溢出,比较结果得出的符号是否发生了变化,如果变化则发生溢出。
进位匹配法
最高数值位产生进位,而符号位不进位时,必然发生符号改变;最高数值位不进位,而符号位进位时,也必然发生符号改变。因此,判断最高数值位和符号位的进位是否匹配,就可以得知是否发生溢出。
双符号位法
用两位符号位表示正负,其中00为正,11为负,运算时,两个符号位均参与运算。
若结果符号位出现10表示发生负溢出,01表示发生正溢出。
定点数的乘法运算
原码乘法
补码乘法(Booth算法)
定点数的除法运算
原码除法(恢复余数法)
原码除法(加减交替法)
补码除法
定点数的表示和运算
# 推荐文章
1.absolute和relative定位
2.display:table-cell在布局上的应用
3.两列布局css
4.解决GitHub访问不了问题
5.Collection集合和Map集合
6.JDK,JRE和JVM
1.absolute和relative定位
2.display:table-cell在布局上的应用
3.两列布局css
4.解决GitHub访问不了问题
5.Collection集合和Map集合
6.JDK,JRE和JVM