【发布时间】:2017-08-08 11:45:35
【问题描述】:
我正在尝试使用 IEEE 754 双精度在 C++ 中将十六进制转换为 float64。 这是我第一次玩比特,所以可能我的代码不够干净。 我不知道为什么我的尾数给了我奇怪的结果,但我认为我做错了什么。
long int raw = 0x40000F0000000001;
int sign = raw >> 63;
long int mantissa = (raw & 0xFFFFFFFFFFFFF);
mantissa +=1;
double exp = ((raw >> 52) & 0x7FF) - 1023;
double result = pow(-1., sign) * mantissa * pow(2.0, exp);
cout << "MANTISSA: " << mantissa << " EXP: " << exp << endl;
cout << "RESULT: " << result << endl;
输出是:
MANTISSA: 16492674416642 EXP: 1
RESULT: 3.29853e+13
有人知道怎么做吗?
谢谢
【问题讨论】: