带有p的点表示法,用于swift中的十六进制数字文字

时间:2015-12-23 00:00:18

标签: swift

我正在使用XCode

https://github.com/nettlep/learn-swift中的第一个基本操场上工作

这个表达到底发生了什么?

0xC.3p0 == 12.1875

我已经了解了十六进制文字以及表示2的幂的特殊“p”符号。

0xF == 15

0xFp0 == 15   //  15 * 2^0

如果我尝试0xC.3,我会收到错误:十六进制浮点文字必须以指数结束。

我发现这个很好overview of numeric literalsanother deep explanation,但我没有看到解释.3p0的内容。

我已经将代码分叉并将本课程升级到XCode 7 / Swift 2 - 这是specific line

1 个答案:

答案 0 :(得分:6)

这是Hexadecimal exponential notation

  

按照惯例,字母P(或p表示“功率”)表示乘以2   提升到的力量...... P之后的数字是十进制数   表示二进制指数。

     

...

     

示例:1.3DEp42表示十六进制(1.3DE)×dec(2 ^ 42)。

对于您的示例,我们得到:

0xC.3p0 represents 0xC.3 * 2^0 = 0xC.3 * 1 = hex(C.3) = 12.1875

where hex(C.3) = dec(12.{3/16}) = dec(12.1875)

例如,您可以尝试0xC.3p1(等于hex(C.3) * dec(2^1)),这会产生两倍的值,即24.375

您还可以在游乐场中研究十六进制值1的二进制指数增长:

// ...
print(0x1p-3) // 1/8 (0.125)
print(0x1p-2) // 1/4 (0.25)
print(0x1p-1) // 1/2 (0.5)
print(0x1p1) // 2.0
print(0x1p2) // 4.0
print(0x1p3) // 8.0
// ...

最后,Apple`s Language Reference - Lexical Types: Floating-Point Literals中也解释了这一点:

  

十六进制浮点文字由0x前缀组成,后面跟着   通过可选的十六进制分数,后跟十六进制   指数即可。十六进制分数由小数点组成   后跟一系列十六进制数字。 指数包含   一个大写或小写的p前缀后跟一个十进制序列   数字,表示p之前的值是2的幂   乘以。例如,0xFp2表示15 x 2 ^ 2,其中   评估为60.类似地,0xFp-2代表15 x 2 ^ -2,其中   评估为3.75。