Objective c 双十六进制表示法

Objective c 双十六进制表示法,objective-c,hex,Objective C,Hex,请您解释一下使用“p”字符的双十六进制数字表示法: 0x1.5p10 or 0x1P-1 提前谢谢。这实际上并不是Objective-C所特有的;这是从C语言继承下来的一个标准特性。它提供了一种不用舍入就可以写入浮点数的方法。它在C标准中有明确的记录,但这里有一个快速概述: 十六进制浮点文字的形式为0x[signifind]p[exponent],其中[signifind]是十六进制数,[exponent]是以10为基数的整数。该数字的值为[signifind]x2^[index] 例如: 0

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

0x1.5p10 or 0x1P-1

提前谢谢。

这实际上并不是Objective-C所特有的;这是从C语言继承下来的一个标准特性。它提供了一种不用舍入就可以写入浮点数的方法。它在C标准中有明确的记录,但这里有一个快速概述:

十六进制浮点文字的形式为
0x[signifind]p[exponent]
,其中
[signifind]
是十六进制数,
[exponent]
是以10为基数的整数。该数字的值为
[signifind]x2^[index]

例如:

0x1.5p10 = (1 + 5/16) x 2^10 = 1344.0
0x1p-1 = 1 x 2^-1 = 0.5
这些示例并不特别有趣,因为它们也可以很容易地完全像十进制浮点文本一样编写。指数越极端,符号就越有趣。例如,考虑最大的有限双精度数:<代码> 0x1.FFFFFFFFFFFFF P1023 十六进制浮点。将其精确地写在十进制中,我们可以得到:

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0

这相当麻烦。

这实际上并不特定于Objective-C;这是从C语言继承下来的一个标准特性。它提供了一种不用舍入就可以写入浮点数的方法。它在C标准中有明确的记录,但这里有一个快速概述:

十六进制浮点文字的形式为
0x[signifind]p[exponent]
,其中
[signifind]
是十六进制数,
[exponent]
是以10为基数的整数。该数字的值为
[signifind]x2^[index]

例如:

0x1.5p10 = (1 + 5/16) x 2^10 = 1344.0
0x1p-1 = 1 x 2^-1 = 0.5
这些示例并不特别有趣,因为它们也可以很容易地完全像十进制浮点文本一样编写。指数越极端,符号就越有趣。例如,考虑最大的有限双精度数:<代码> 0x1.FFFFFFFFFFFFF P1023 十六进制浮点。将其精确地写在十进制中,我们可以得到:

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0
这相当麻烦