C中的十六进制浮点常数

Mal*_* P. 9 c floating-point hex

我有一个十六进制浮点常量,我想在我的C程序中直接声明,并避免转换.我相信它必须首先正常化,对吗?我如何规范它并声明它?

// hex constant 0xDE.488631  
double val = 0xDE.488631; // Error must have exponent.
double val = 0x0.DE488631p-2;  // Pretty sure this is wrong.
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 17

您可以使用以下指数0:

float val = 0xDE.488641p0;
Run Code Online (Sandbox Code Playgroud)

其中更常见的符号表示DE.488641×2 0(当然是16号).你的猜测很接近 - 指数是二进制指数,而不是十六进制指数.当你想要一个正指数时,你也使用负指数.更正您的第二个示例,您可以使用:

float val = 0x0.DE488631p8;
Run Code Online (Sandbox Code Playgroud)

其中常规数学符号表示0.DE488631×2 8,或等效于指数的十六进制数,0.DE488631×16 2.

我认为使用指数0更容易理解,除非你有理由使用第二个例子中的表格.