规则问题。
比如一个4位2进制数:1000,转成10进制的计算方式是:1*2³ = 8
但如果改变了计算规则:假定:第1位表示一个实数的整数部分,第2-4位分别代表小数的1,2,3位,
则1000表示为:1*2的0次方 + 0 * 2的-1次方+ 0 * 2的-2次方 + 0 * 2的-3次方,结果为1
上代码中的r=(float*)p转换也和这个道理是一样的,把本来表示10进制100的2进制数,转成了float类型,而float类型的表达方式与整数差别太大了。
具体float的表示方式,baidu吧,另外,也了解一下double与float的区别。
整数100,存储结果为0x0000 0064。
按照float型解析后,得到的结果为:符号位0、指数部分-127、小数部分0x64/0x800000,因此实际对应十进制的结果是:
1.4012984643248170709237295832899e-43
即1.4013×10的-43次方。
总结:说到底,只要你了解到数据在存储器中的存储形式,以及IEEE浮点数的格式,就会明白了。
在c++里int和float在内存中的表示方法不一样
表示(int)100的内存换成float是1.4013-043