Swift中的浮点十六进制表示法

Mic*_*ars 4 hex swift

我不明白浮点数是如何用Swift中的十六进制表示法表示的.Apple的文档显示0xC.3p0等于十进制的12.1875.有人可以告诉我如何进行转换吗?我明白在十进制十六进制值0xC = 12之前.小数点后的3p0是我难倒的地方.

Mar*_*n R 10

文档:

浮点 文字
...
十六进制浮点文字由0x前缀组成,后跟可选的十六进制小数,后跟十六进制指数.十六进制小数由小数点后跟一系列十六进制数字组成.指数由一个大写或小写的p前缀后跟一个十进制数字序列组成,这些十进制数字表示p之前的值乘以2的2的幂.例如,0xFp2表示15×2 2,其评估为60.类似地,0xFp-2表示15×2 -2,其评估为3.75.

在你的情况下

  0xC.3p0 = (12 + 3/16) * 2^0 = 12.1875

另一个例子:

  0xAB.CDp4 = (10*16 + 11 + 12/16 + 13/16^2) * 2^4 = 2748.8125

此格式与%aprintf 格式非常相似(请参阅 http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html).它可用于直接在其二进制IEEE 754表示中指定浮点数,请参阅为什么Swift使用基数2作为十六进制浮点值的指数? 欲获得更多信息.


vac*_*ama 5

0xC.3p0使用位值系统解释:

C (or 12) is in the 16^0 place
3 is in the 16^-1 place (and 3/16 == 0.1875)
p says the exponent follows (like the e in 6.022e23 in base 10)
0 is the exponent (in base 10) that is the power of 2 (2^0 == 1)
Run Code Online (Sandbox Code Playgroud)

所以把它们放在一起

0xC.3p0 = (12 + (3/16)) * 2^0 = 12.1875
Run Code Online (Sandbox Code Playgroud)