引言
大家都知道,可以在计算机处理器直接运行的是由0,1构成的机器代码(machine code),本文将介绍浮点数(floating-point number )在机器码中是如何被编码表示的。
整数(integer)是如何被编码的呢?小伙伴们应该听过补码,原码,反码吧,这些正是整数被编码的不同规则。
原码:一定字长,在不溢出的情况下,最高位是符号位,跟上该整数二进制表示。符号位中0代表正数,1代表负数。
补码(two's compliment):最高位也是符号位,但是与原码不同的是符号位也参与到求值里。
例如:1001=-2^3+1=-7
而原码中 1001=-1
代表同一数值的原码是可以转换成其补码的。
很多文章里说补码是无法直接转换成十进制数值,要先换成原码再求,其实这是错误的。理解补码最高位也是参与值的即可。
后续笔者将会撰写一篇文章详细讲解原码,补码,以及反码。
下面开始正题吧!
浮点数(floating-point number)是什么
其实计算机表示小数有两种方式:
- 定点数 (fixed-point)
- 浮点数(floating-point)
区别在于,定点数编码小数时小数点位置是确定的,浮点数小数点位置是可以变化的。
如何用科学计数法来表示二进制小数,即形如:
V = ( − 1 ) s × M × 2 E V=(-1)^s \times M \times 2^E V=(−1)s×M×2E
0.25(d)可以写作
0.01 ( b ) × 2 0 0.01(b)\times2^0 0.01(b)×20
也可以写作
1.0 ( b ) × 2 − 2 1.0(b)\times 2^{-2} 1.0(b)×2−2
注:括号中的字母
d表示十进制 decimal
b表示二进制 binary
h表示十六进制 hexadecimal
IEEE floating-point representation
正如上文所述,IEEE