首页 > 代码库 > double值在内存中的存储
double值在内存中的存储
拿小数4.8125来举个例子,
实现步骤:
1.把整数部分转换为2进制
十进制的4 = 二进制的0100
2.把小数部分转换为2进制
0.8125 * 2 = 1.625 1
0.6250 * 2 = 1.25 1
0.2500 * 2 = 0.5 0
0.5000 * 2 = 1.0 1
拿小数部分不停的去乘以2,并取出每次结果的整数部分,直到小数部分为0为止或者到达指定精度为止
十进制的0.8125 = 二进制的0.1101
3.合并整数部分和小数部分
二进制的4.8125 = 100.1101
4.把二进制小数写成1.xxx * 10的n次方或者0.xxx * 10的n次方形式(n可以为负数)
100.1101 = 1.001101*10的2次方(左移)
①符号位:0表示正式,1表示负数
②指数位:第一位:小数点左移为1,右移为0,其他位:(n-1)的二进制数,
③尾数位:二进制的小数部分从左到右顺填
ps:
float的符号位占1位,指数位占8位,尾数部分占23位
double 的符号位占1位,指数位占11位,尾数部分占52位
float 0 0000 0000 0000 0000 0000 0000 0000 000
double 0 0000 0000 000 0000 0000 0000 0000 0000 0000 0000....
1.001101*10的2次方:
(n-1)的二进制 = 1的二进制 = 0001
float 0 1000 0001 0011 0100 0000 0000 0000 000
double 0 1000 0000 001 0011 0100 0000 0000 0000 ....
5.最后的结果
float 0100 0000 1001 1010 0000 0000 0000 0000
4 0 9 A 0 0 0 0
double 0100 0000 0001 0011 0100 0000 0000 0000 ....
4 0 1 3 4 0 0 0
程序运行结果图片:
double值在内存中的存储