自定义标题
定点数的表示
原码的表示范围
四位原码表示的最大整数和最小整数
形式 | 真值(整数) | 真值(小数) | |
---|---|---|---|
最大(整/小)数 | 0111 | 7 | (0.111)1-2-3 |
最小(整/小)数 | 1111 | -7 | -(1-2-3) |
最大小数的真值是如何计算的呢?
最大小数 | 运算 | 辅助值 | 结果 | |
---|---|---|---|---|
形式 | 0111(0.111) | + | 0001(0.001) | 1.000 |
真值 | 1-2-3 | + | 2-3 | 1 |
最小小数的真值是如何计算的呢?
最小小数 | 运算 | 辅助值 | 结果 | |
---|---|---|---|---|
形式 | 1111(1.111) | + | 1001(1.001) | 1.000 |
真值 | -(1-2-3) | + | -2-3 | -1 |
四位原码能表示多少个整数
-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7共15个
23*2=16个为什么多出来一个,因为带符号位的原码有一个正零一个负零,多出来一个零应该减去。
从四位原码推导到N位原码
整数 | 2N-1-1~ -(2N-1-1) |
---|---|
小数 | 1-2-(N-1) ~ -(1-2-(N-1)) |
N位原码能表示多少个整数
2N-1
补码的表示范围
先观察下表
-8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
原码 | 1111 | 1110 | 1101 | 1100 | 1011 | 1010 | 1001 | 0001 | 0010 | 0011 | 0100 | ||
反码 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 0001 | 0010 | 0011 | 0100 | ||
加一 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||
补码 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 0001 | 0010 | 0011 | 0100 |
四位补码表示最大整(小)数和最小整( 小) 数
原码 | 补码 | 整数真值 | 小数真值 | |
---|---|---|---|---|
最大 | 0111 | 0111 | 7 | 1-2-3 |
最小 | 1111 | 1001-0001(20)=-7-1=-8 | -8 | 1.001-0.001=-(1-2-3)-2-3 =-1 |
N位补码的表示范围
数 | N位补码范围 | N位原码范围 |
---|---|---|
整数 | 2N-1-1 ~ -2N-1 | 2N-1-1~ -(2N-1-1) |
小数 | 1-2-(N-1) ~ -1 | 1-2-(N-1) ~ -(1-2-(N-1)) |
定点数的运算
原码加减
原码不适合做加减运算,步骤:1、判断结果的符合,2、||被减数|-|减数||,3、结果带上符合
补码加减
【A+B】补=【A】补+【B】补
【A-B】补=【A】补+【-B】补
优点:直接运算
溢出的判断
什么是溢出?假设计算机int类型是四位,下表给出溢出的例子
真值 | 符号位 | ||||
---|---|---|---|---|---|
a | 6 | 0 | 1 | 1 | 0 |
+ | + | ||||
b | 5 | 0 | 1 | 0 | 1 |
结果 | -7 | 1 | 1 | 1 | 1 |
两个正数相加却得到一个负数显然是不合常理的,也就是溢出了,这个例子也展现了数据在内存中溢出的真实状态。
双符号位法
两个符号位同时运算,双符号位不同则溢出,上溢(超出能表示的最大值),下溢(超出能表示的最小值)
数值最高位的进位和符号位进位不同则溢出
结果的符号位如果与其中一个加数不同时则溢出
定点数的移位
逻辑移位
分为逻辑左移和逻辑右移,规则:移出位移走,符号位补零;
小循环移位
移出移入到补位位,同时移入到标记C中
C | C | |||||
---|---|---|---|---|---|---|
小循环左移 | 1 | 0 | 1 | 0 | 1 | |
1 | 0 | 1 | 0 | |||
小循环右移 | 0 | 1 | 0 | 1 | 0 |
大循环移位
大循环左移,大循环又移,规则:移出位移入到C位,C位移入到补位位
算术移位
保留数值的数学意义,对二进制而言左移相当于乘2,右移相当于除2
有可能溢出或丧失精度
对于正数而言,三码相同,无论左移右移都补0;
对负数反码而言,左移右移都补1;
对负数补码而言,左移在右补0,右移在左补1;