float 内存如何存储的
类型 | 存储位数 | 总位数 | 偏移值 | ||
数符(S) | 阶码(E) | 尾数(M) | |||
短实数(float) | 1 | 8 | 23 | 32 | 127 |
长实数(double) | 1 | 11 | 52 | 64 | 1023 |
N (10) = 123.456,
换算成二进制表示:
N (2) = 1111011. 01110100101111001
= 1. 11101101110100101111001(...) * 2^6
那么E– 127 = 6; E = 127 + 6 = 133(10) = 10000101(2)
M = 111 0110 1110 1001 0111 1001(省略了最高数字位1, 共23bit)
组合起来就是:
S E M
0 10000101 1110110 1110 1001 0111 1001
4bit一间隔:
0100 0010 1111 0110 1110 1001 0111 1001
4 2 F 6 E 9 7 9
// floatMem.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
typedef union{
float fa;
unsigned char arry[4];
}MyUnion;
int main(int argc, char* argv[])
{
MyUnion var;
var.fa=123.456f;
printf("%x,%x,%x,%x\n",var.arry[0],var.arry[1],var.arry[2],var.arry[3]);
return 0;
}
/*
79,e9,f6,42
Press any key to continue
*/