float和double的存储结构
类型 | 符号位 | 指数位 | 尾数位 | 大小 |
float | 1 | 8 | 23 | 32bit |
double | 1 | 11 | 52 | 64bit |
单精度例1:
float b = 2.25;
b的二进制表示:10.01
b的二进制科学计数法表示:1.001*2^1
符号位:0(1位) | 指数位:1+127=128 (8位) | 尾数位:001(23位) |
0 | 1000 0000 | 001 0000 0000 0000 0000 0000 |
双精度例1:
double c = 2.25;
b的二进制表示:10.01
b的二进制科学计数法表示:1.001*2^1
符号位:0(1位) | 指数位:1+1023=1024(11位) | 尾数位:001(52位) |
0 | 100 0000 0000 | 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 |
(111.01)= 7.4
计算机中的十进制小数用二进制通常是用乘二取整法来获得的
比如0.65换算成二进制就是:
0.65 × 2 = 1.3 取1,留下0.3继续乘二取整
0.3 × 2 = 0.6 取0, 留下0.6继续乘二取整
0.6 × 2 = 1.2 取1,留下0.2继续乘二取整
0.2 × 2 = 0.4 取0, 留下0.4继续乘二取整
0.4 × 2 = 0.8 取0, 留下0.8继续乘二取整
0.8 × 2 = 1.6 取1, 留下0.6继续乘二取整
0.6 × 2 = 1.2 取1,留下0.2继续乘二取整
.......
所以就是:0.1010 0110 0110 0110 0110 0110 0110 0110 0110 0110 0110 0110 0110
进制转换器网页:https://www.sojson.com/hexconvert.html