在C语言中,我们可以生成十六进制浮点数,也可以使用printf()
以十进制字符串的形式输出它们:
printf("%f\n", 0x1.0p8); // Prints 256.00000
如何以十六进制形式输出浮点数,同时保持精度?(所有十六进制浮点文字都是二元有理数,因此可以用浮点表示,不像十进制文字)
printf("%MAGIC\n", 0x1.0p8) // Prints 100.00000
我的研究只发现了与以十六进制形式打印底层表示的字节有关的结果,但没有发现如何以十六进制形式打印浮点数的值
1条答案
按热度按时间6mw9ycah1#
您可以使用
%a
打印精度保持十六进制格式的浮点数。从man page:double参数四舍五入,转换为十六进制表示法,样式为[-]0xh.hhhp[±]d,其中十六进制小数点字符后的位数等于精度规格。如果精度缺失,则视为足以精确表示浮点数,不发生四舍五入。如果精度为零,不显示十六进制小数点字符。p是文字字符'p',指数由正号或负号后跟表示指数为2的十进制数组成。A转换使用前缀“0X”表示十六进制数字的字母“ABCDEF”(而不是“abcdef”),以及分隔尾数和指数的字母“P”(而不是“p”)。