一、 C++验证float内存模型
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
char hexArray[] = "0123456789ABCDEF";
string getHexString(unsigned char byteDate)
{
string str("0x");
str.push_back(hexArray[(byteDate >> 4) & 0x0f]);
str.push_back(hexArray[byteDate&0x0f]);
return str;
}
void printFloatInfo(float floatNum)
{
cout << "=================================================" << endl;
unsigned char *pFloat = (unsigned char*)&floatNum;
int *pInt = (int*)&floatNum;
cout << "浮点数值:" << floatNum << std::endl;
cout << "对应内存:";
for(int i=3;i>=0;i--)
{
cout << getHexString(*(pFloat+i)) << " ";
}
cout << endl;
cout << "符号位:";
cout << ((*(pFloat+3)>>7) & 0x01) << endl;
cout << "指数部分:";
int exponent = (*pInt >> 23) & 0xff;
exponent = exponent - 127;
cout << exponent << endl;
cout << "尾数部分:";
int tail = (*pInt & 0x7fffff) + (1<< 23);
double tailNum = 0;
double addNum = 1;
for(int i=0;i<24;i++)
{
if((tail & (1 << 23) )> 0)
{
tailNum = tailNum + addNum;
}
tail = tail << 1;
addNum = addNum / 2;
}
double temp = pow(2,exponent);
tailNum = tailNum * temp;
cout << tailNum << endl;
}
int main() {
cout << "分析float内部结构" << std::endl;
printFloatInfo(1.3);
printFloatInfo(9.25);
printFloatInfo(-1.3);
printFloatInfo(-9.25);
return 0;
}