[Toc]
小数
- 正数:原码=补码
- 负数:
- 原码 = 正数部分(去掉负号)的二进制值,且符号位(最左边的比特位)为1
- 反码 = 正数部分(去掉负号)的二进制值,按位取反
- 补码 = 反码 + 1
- 小数点依旧用点
- 纯小数的原码、反码、补码
补码的引进就是为了解决机器上减法运算不便的,思想是使符号位参与运算,即用补码表示的负数进行加法运算就相当...http://www.jianshu.com/p/979f6e89cb7a
浮点数
- 浮点数由阶码, 尾数和符号位(数符位)组成
单精度与双精度
指数
- 是以类似移码的形式出现
- 双精度与单精度都保留00000000 与 11111111。
- 单精度偏移127,双精度偏移1023。
- 单精度的指数范围: -126 到 127 (1 - 127 到 254 - 127)
- 双精度的指数范围:1 - 1023 到 2046 - 1023
尾数
尾数没有需要保留的数。最大都是全1,最小都是全0
特殊情况
指数全为1
尾数全为0
- 视为无穷大。
- 若符号位为1则是负无穷大,为0 则是正无穷大。
- 运用无穷大,在计算中无需检查溢出。
尾数不全为0
- 视为无效操作结果(NaN)
浮点数相加
步骤
graph TD
A(对大阶) -->B(加有效数)
B --> C(规格化)
C --> |溢出处理| D(舍入处理)
D --> E(决定符号位)
1.对大阶[1]
2.加有效数(指数已相同,把有效数部分相加)
3.规格化[2],溢出处理(使其变为科学表示法形式)
4.舍入处理
舍入处理
博客
内容
有两种
- “0舍1入”法:右移时被丢掉数位的最高位为0则舍去,反之则将尾数的末位加“1”。
- “恒置1”法:只要数位被移掉,就在尾数的末位恒置“1”。从概率上来说,丢掉的0和1各为1/2。
溢出处理
阶码溢出
- 上溢
超过了阶码可能表示的最大值的正指数值,一般将其认为是+∞和-∞。 - 下溢
超过了阶码可能表示的最小值的负指数值,一般将其认为是0。
尾数溢出
- 尾数上溢
两个同符号尾数相加产生了最高位向上的进位,将尾数右移,阶码增1来重新对齐。 - 尾数下溢
在将尾数右移时,尾数的最低有效位从尾数域右端流出,要进行舍入处理
浮点数相乘
步骤
graph TD
A(数相加) -->B(尾数相乘)
B --> C(规格化)
C --> |检查溢出| D(舍入)
D --> E(决定符号位)
规格化[3]
目的
为了提高数据的表示精度,为了数据表示的唯一性,它与浮点数的标准化并无关系
步骤
一个浮点数有不同的表示:
0.5
0.05 * 10^1
0.005 * 10^2
50 * 10 ^-2
尾数为R进制的规格化:
绝对值大于或等于1/R。
尾数规格化:1/2 ≤ M <1,
最高有效位绝对值为1,其中 M为尾数。
在计算机内,其纯小数部分被称为浮点数的尾数,对非 0 值的浮点数,要求尾数的绝对值必须 >= 1/2,即尾数域的最高有效位应为1,称满足这种表示要求的浮点数为规格化表示:
0.1000101010
把不满足这一表示要求的尾数,变成满足这一要求的尾数的操作过程,叫作浮点数的规格化处理,通过尾数移位和修改阶码实现。