数据在计算机内都是二进制存储的,存储运算都使用的是补码。
原码
就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码
正数的补码与其原码相同;负数的补码是在其反码的末位加1。
浮点数在计算机中存储分为3个部分:
IEEE 754格式的浮点数由三个字段组成:符号位,偏置指数和分数
单精度浮点数float符号位占1个字节、偏移指数占8个字节、分数占23个字节
1、把浮点数转为2进制形式,如0.00101
2、将二进制形式移位变成科学技术法形式,如:0.00101 = 1.01 * 2^-3
3、得到分数和指数,如这里分数为.01,指数为-3
4、偏差指数 = 指数 + 偏差 float的偏差为127,这里得到偏差指数为 124
5、存储格式为:符号位 + 偏差指数(2进制) + 偏差 ,如这里存储为0 00011111 0100000 00000000 00000000
32位浮点数转二进制存储:
* 参考链接: https://en.wikipedia.org/wiki/IEEE_754-1985
https://blog.csdn.net/jjj19891128/article/details/22945441
* 步骤1:整数转二进制 不停/2的做法,将每个余数依次相加
* 步骤2:小数转二进制 不同*2 <1 计0, >1 计1,用(x-1)继续往后做*2操作
* 步骤3:整数部分和小数部分二进制粘合起来,注意小数点不要去除
* 步骤5:将2进制变成1.xxxx * 2^n 次方的形式,整数+小数一共24位,小数点不计位数,对应IEEE 754-1985标准中的小数占位,(第24位可能要采用前面的舍入原则), 得到指数
* 步骤6:利用指数-标准偏差值(float为127)得到偏差指数
* 步骤7:符号位+偏差指数的二进制(8位)+小数部分二进制 就是该float的存储形式的原码,存储即是原码转为补码存储。
* 维基百科中float的例子的操作: 0.15625得到原码
* 整数部分0,得到二进制也就是0
* 小数部分:
* 0.15625 * 2 = 0.3125 0
* 0.3125 * 2 = 0.625 0
* 0.625 * 2 = 1.25 1
* 0.25 * 2 = 0.5 0
* 0.5 * 2 = 1.0 1
* 0 * 2 = 0 0
* ......
* 粘合得到二进制为:0.00101000000000000000000.....
* 转换1.xx * 2^n 形式,并截取长度为24: 1.0100000 00000000 00000000 * 2 ^ -3
* 得到偏差指数为127 -3 = 124
* 124转二进制 8位存储为:00011111
* 填充符号位 + 偏移指数 + 小数存储部分 得到原码: 0 00011111 0100000 00000000 00000000
原文地址:https://www.cnblogs.com/aigeileshei/p/10518133.html