Objective-C双十六进制表示

时间:2012-09-15 16:18:33

标签: objective-c hex

请您解释使用'p'字符的双十六进制数表示法:

0x1.5p10 or 0x1P-1

提前谢谢。

1 个答案:

答案 0 :(得分:4)

这实际上并不特定于Objective-C;它是从C继承的标准特性。它提供了一种编写浮点数而无需舍入的方法。它在C标准中有明确记载,但这里有一个快速概述:

十六进制浮点文字的格式为0x[significand]p[exponent],其中[significand]是十六进制数,[exponent]是基数为10的整数。该数字的值为[significand] x 2^[exponent]

所以,例如:

0x1.5p10 = (1 + 5/16) x 2^10 = 1344.0
0x1p-1 = 1 x 2^-1 = 0.5

这些示例并不是特别有趣,因为它们也可以很容易地写成十进制浮点文字。随着指数变得更加极端,符号变得更有趣。例如,考虑十六进制浮点中最大的有限双精度数:0x1.fffffffffffffp1023。用十进制精确写出它给我们:

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0

这很麻烦。