首页 > 代码库 > 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值在内存中的存储