我正在https://github.com/nettlep/learn-swift使用XCode
这个表达式到底发生了什么?
0xC.3p0 == 12.1875
我已经学习了十六进制文字和表示2的幂的特殊"p"表示法。
0xF == 15
0xFp0 == 15 // 15 * 2^0
如果我尝试0xC.3
,我会得到错误:十六进制浮点文字必须以指数结尾。
我发现了数字文字的一个很好的概述和另一个深入的解释,但我没有看到什么可以解释.3p0
的作用。
我已经分叉了代码,并将本课程升级为XCode 7/Swift 2——这是具体的一行。
这是十六进制指数表示法。
按照惯例,字母p(或p,表示"幂")表示乘以2提升到的力量。。。P后面的数字是十进制的表示二进制指数。
示例:1.3DEp42表示十六进制(1.3DE)×十二月(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
// ...
最后,这也在苹果的语言参考中得到了解释——词汇类型:浮点文字:
十六进制浮点文字由0x前缀组成,后跟由一个可选的十六进制分数,后跟一个十六进制指数。十六进制小数由一个小数点组成后面跟着一系列十六进制数字指数由一个大写或小写的p前缀,后跟一个十进制序列指示p前面的值是2的几次方的数字乘以。例如,0xFp2表示15 x 2^2评估为60。类似地,0xFp-2表示15 x 2^-2评估为3.75。