--------------------------------------------------------------------------------
在VC6.0----float环境一共32位
其中第一位是符号位 第二到第9位中间8位为小数点位置(指数以127的二进制为原点向下为负指数 向上为正指数)后面23位为数据位。
S EEEEEEEE DDDDDDDDDDDDDDDDDDDDDDD
例如 -12.5的十六进制表示
1.先把整数部分换成二进制 12的二进制为:00001100
2.小数部分换成二进制 方法为小数*2 取整 为1
00001100.1
小数点左移3位
00001100.1 因为-12.5是负数所以 符号位为1 ,小数点左移3位 则小数点位置为01111111+3 后面数据位移到后面的23位中不够则补0
1 10000010 10010000000000000000000
1100 0001 0100 1000 0000 0000 0000 0000
C 1 4 8 0 0 0 0
则-12.5在内存中(小尾排法)表示就为:00 00 48 C1
写程序验证下:
-----------------------------------------------------------------------------
另外我补充一下:
①.指数位是从127为原点,比如10^3(10的3次方)
指数部分的二进制转换则为:127+3 = 130 ---->10000010
如果是10的-3次方则:
127-3 = 124 ------>1111100
③.还一点就是
12.3->1100.1
左移了3位 为1.1001整数部分的1不会存储到float类型的变量块中
因为最高位的2进制总是为1 考虑到节约空间 以便能存储更高的精度
最后不足23位的地方全部补0
③.int->float 会丢失精度
因为int数据存储区域是32位 而float是23位
所以会丢失精度
float->int同样会丢掉小数部分的精度
平时写程序的 时候要尽量的避免 数据类型的隐式转换
用WinHex查看内存块
当然 你也可以用其他的方式来验证
--------------------------------------------------------------------------------