#include <stdio.h>
int main()
{
float f=-8.25; //浮点数在内存中的表示 -8.25=>1000.01=>1.00001x2^3
//1位符号位+8位指数位+23位指数位
//符号位1 指数127+3=130=>1000 0010 尾数00001
//1100 0001 0000 0100 0000 0000 0000 0000
unsigned int* p;
p=&f;
printf("0x%08x\n",*p);
return 0;
}
1.C语言中 浮点数(float 32bit,double 64bit)在内存中的储存方式如下图:
type | 符号位 | 指数位 | 尾数位 |
---|---|---|---|
float | 31位 (1 bit) | 23~30位(8bit) | 0~22位(23bit) |
double | 63位 (1 bit) | 52~62位(11bit) | 0~51位(52bit) |
2.浮点数的转化分为3步:
- 转化为二进制
- 用科学计数法表示
- 指数加上偏移量
3.浮点数的正负数在内存中的存储相同IEEE 754标准,不同于有符号数正数负数考虑补码的差异
(Tips: 这一点是写给自己看的,有时候会陷入浮点数是不是有补码的圈子23333)