将一个float型转化为内存存储格式的步骤为:
①.将这个实数的绝对值转化为二进制,转化方法如下:例如11.25表示为二进制数先将整数部分转为二进制
11/2=5 余1
5/2=2 余1
2/2=1 余0
1/2 余1
0结束 11的二进制表示为(从下往上):1011
小数部分转化为二进制:用小数部分乘以2,乘到小数部分为0或者到精确位数为止.
0.25x2=0.5 0
0.5x2=1 1
小数部分的二进制表示为(从上往下):01
11.25的二进制表示可表示为1011.01
②将这个二进制格式实数的小数点左移或者右移N位,直到小数点移动到第一个有效数字的右边.向左移为+,向右移为-
1011.01移动到第一个有效数字需要向左移3位,指数为+3,结果为1.01101
③从小数点右边第一位开始数出二十三位数字放入第22到第0位,如果位数不够右边补零
1.01101->将小数位放入22-0位,从左到右,右边位数不够补零
④如果实数是正的,则在第31位放入0,否则放入1
⑤如果n是左移得到的,说明指数为正,第30位放入1.如果是右移得到的或 N=0,则第30为放入0;
⑥将n减去1后化为二进制,并在左边加补0补足七位,再放入第29到第23位
1011.01->1.01101为左移3为,指数为3,所以这里是3-1=2,16进制为10,左边补0
另外一种方法就是用127加上指数,得出的二进制结果就是中间的8位
这里指数为+3, 127+3=130 16进制为 0x82,二进制表示为 1000 0010
如果指数为-3,127+(-3)=124 16进制为7c,二进制表示为0111 1100
结果为 0100 0001 0011 0100 0000 0000 0000 0000
4 1 3 4 0 0 0 0
到此,float存入内存完成
8.4存入内存
整数部分8
8/2=4 0
4/2=2 0
2/2=1 0
1/2=0 1
二进制为 1000
小数部分0.4,这里为死循环,所以只计算到最大位数
0.4x2=0.8 0
0.8x2=1.6 1
0.6x2=1.2 1
0.2x2=0.4 0
0.4x2=0.8 0
0.8x2=1.6 1
0.6x2=1.2 1
0.2x2=0.4 0
0.4x2=0.8 0
0.8x2=1.6 1
0.6x2=1.2 1
0.2x2=0.4 0
0.4x2=0.8 0
0.8x2=1.6 1
0.6x2=1.2 1
0.2x2=0.4 0
0.4x2=0.8 0
0.8x2=1.6 1
0.6x2=1.2 1
0.2x2=0.4 0
0.4x2=0.8 0
0.8x2=1.6 1
0.6x2=1.2 1
0.01100110011001100110011
8.4的二进制为:1000.01100110011001100110011
1000.01100110011001100110011左移3位:1.00001100110011001100110 23位
8.4为整数,指数为左移3位,结果如下:
0100 0001 0000 0110 0110 0110 0110 0110
4 1 0 6 6 6 6 6
0.25存入内存: 只有小数部分
0.25x2=0.5 0
0.5x2=1 1
0.25二进制位:0.01
0.01->1.00 右移2位 所以指数为负数 -2-1=-3 十六进制FD 二进制 11111101
由于第30位是由( 左移为1 )或 (右移为0) 的来决定,所以只会取七位放入也就是 1111101,所以结果为:
指数为-2,127+(-2)=125 16进制为7D,二进制表示为0111 1101
0011 1110 1000 0000 0000 0000 0000 0000
3 E 8 0 0 0 0 0
double型转为二进制如下