程序员面试宝典读书笔记
文章目录
C/C++程序设计
浮点数的存储
有下面的代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a;
float *b = (float *)&a;
*b = 13.0f;
printf("%d\n", a);
printf("%#x\n", a);
return 0;
}
最后的输出会是多少呢? 答案是:
1095761920
0x41500000
涉及到IEEE754浮点数的存储方式。
这是计组的课上讲的,一些特殊的复杂的规定就不记了,要点是:
- 已知十进制浮点数,求其内存中的十六进制表示,假设这个数是13.0
- 先转化成二进制,为1101.0
- 再规格化,为1.101 * 2 ^ 3
- 求指数,对于float,加上127, 3 + 127 = 130
- 写出二进制,float的指数位为8位,符号位1位,小数位为23位。
130的二进制为1000 0010,8位。则13.0的二进制表示为:
0 1000 0010 101 00000000000000000000
- 写成16进制,每四个一组:
0100 0001 0101 0000 0000 0000 0000 0000
最后的十六进制为:0x41500000
参考了这里 .