我正在 使用XCode 在https://github.com/nettlep/learn-swift中完成第一个基本操场
这个表达到底发生了什么?
0xC.3p0 == 12.1875
我已经了解了十六进制文字和特殊的"p"符号,它表示2的幂.
0xF == 15 0xFp0 == 15 // 15 * 2^0
如果我尝试0xC.3
我得到错误:十六进制浮点文字必须以指数结束.
我发现了数字文字的这个很好的概述和另一个深刻的解释,但我没有看到解释是什么的东西.3p0
.
我已经将代码分叉并将本课程升级到XCode 7/Swift 2 - 这是具体的一行.
这是十六进制指数表示法.
按照惯例,字母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的语言参考 - 词汇类型:浮点文字:
十六进制浮点文字由0x前缀组成,后跟可选的十六进制分数,后跟十六进制指数.十六进制小数由小数点后跟一系列十六进制数字组成.指数由一个大写或小写的p前缀后跟一个十进制数字序列组成,这些十进制数字表示p之前的值乘以2的2的幂.例如,0xFp2表示15 x 2 ^ 2,其计算结果为60.类似地,0xFp-2表示15 x 2 ^ -2,其计算结果为3.75.