C语言 我如何printf()一个十六进制形式的浮点数?

dkqlctbz  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(264)

在C语言中,我们可以生成十六进制浮点数,也可以使用printf()以十进制字符串的形式输出它们:

printf("%f\n", 0x1.0p8); // Prints 256.00000

如何以十六进制形式输出浮点数,同时保持精度?(所有十六进制浮点文字都是二元有理数,因此可以用浮点表示,不像十进制文字)

printf("%MAGIC\n", 0x1.0p8) // Prints 100.00000

我的研究只发现了与以十六进制形式打印底层表示的字节有关的结果,但没有发现如何以十六进制形式打印浮点数的值

6mw9ycah

6mw9ycah1#

您可以使用%a打印精度保持十六进制格式的浮点数。从man page
double参数四舍五入,转换为十六进制表示法,样式为[-]0xh.hhhp[±]d,其中十六进制小数点字符后的位数等于精度规格。如果精度缺失,则视为足以精确表示浮点数,不发生四舍五入。如果精度为零,不显示十六进制小数点字符。p是文字字符'p',指数由正号或负号后跟表示指数为2的十进制数组成。A转换使用前缀“0X”表示十六进制数字的字母“ABCDEF”(而不是“abcdef”),以及分隔尾数和指数的字母“P”(而不是“p”)。

相关问题