IEEE
Adr*_*ica 10
行float q = 0xa03d217b;转换的整数(十六进制)字面成float表示该数(或其近似值)值; 因此,分配给您qwill的值是(十进制)值2,688,360,827(0xa03d217b相当于),正如您所指出的。
如果您必须float使用其内部 IEEE-754 (HEX) 表示来初始化变量,那么您最好的选择是通过 a的成员使用类型双关 (在 C 中合法,但在 C++ 中不合法):union
#include <stdio.h>typedef union { float f; unsigned int h;} hexfloat;int main(){ hexfloat hf; hf.h = 0xa03d217b; float q = hf.f; printf("%lg\n", q); return 0;}还有一些使用指针转换的“快速技巧”,例如:
unsigned iee = 0xa03d217b;float q = *(float*)(&iee);但是,请注意,此类方法存在许多问题,例如潜在的字节顺序冲突以及您违反了严格的别名要求的事实。
您可以通过使用“联合”来避免混叠问题,而且我从未见过或听说过使用不同字节顺序处理整数和浮点数的机器,但在技术上是可行的。更有可能是使用非 IEEE fp 的机器,尽管这些天很少见。 (3认同)IEEE