十进制转化为二进制
整数部分:110101 = 25 + 24 + 22 + 20 = 32 + 16 + 4 + 1 = 53
小数部分:将前面的部分小数部分不断乘以2并记录整数部分,从小数点开始往右移动。
0.7 × 2 = 0.4 + 1
0.4 × 2 = 0.8 + 0
0.8 × 2 = 0.6 + 1
0.6 × 2 = 0.2 + 1
0.2 × 2 = 0.4 + 0
0.4 × 2 = 0.8 + 0
......
(0.7)10 = (0.1011001100....)2 = (0.1)2
所以(53.7)10 = (110101. (0.1))2
二进制转化为十进制
整数部分
(10101)2
1 × 24 + 0 × 23 ••• = (21)10
小数部分(有限的以2为基的展开)
(0.1011)2 = +
+
实数的浮点表示
IEEE 754 标准包含了一组实数的二进制表示,一个浮点数字包含三部分:
- 符号( + - )
- 尾数(一串有效数字)
- 指数
![](https://img.haomeiwen.com/i832008/cd16ea6ab57a8b91.png)
标准化的IEEE浮点数表示为
+-1.bbbb...b * 2p
b 的取值是0或者是1,p是一个M位的二进制数
当一个二进制数用一个标准浮点数表示的时候,它被称为左对齐。这意味着左边的一个数位1被平移到小数点的左边,平移通过指数的变化进行补偿。比如9对应的1001保存为
+1.001 * 23
机器精度的取舍
机器精度对应的数字,记作εmach,它代表的是1和比1大的最小浮点数之间的距离,对于IEEE双精度浮点表示。
εmach = 2-52
机器必须以某种方式对数字进行截断,并且在这个过程中仅仅引入较小的误差,称为截断。通过简单丢弃在末端之外的数位来实现,也就是说超过52位以后的数字直接被丢掉。
另外一种方式是舍入,具体是说在双精度浮点数字中,小数点右边的53位是一个重要的数位,是1 则52位加1,0,没有变化。
判断第 x 位状态是否开启(x 以 0 开始,下同):
status & (1 << x) == 0 // bt ( bit test )
打开第 x 位
status |= 1 << x // bts ( bit test and set )
重置第 x 位
status &= ~(1 << x) // btr ( bit test and reset )
取反第 x 位
status ^= 1 << x // btc ( bit test and complement )
网友评论