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

时间:2015-04-19 19:54:24

标签: swift hex

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

5 个答案:

答案 0 :(得分:7)

来自documentation

  

浮点文字
  ...
  十六进制浮点文字由0x前缀组成,紧随其后   通过可选的十六进制分数,后跟十六进制   指数。十六进制分数由小数点组成   后跟一系列十六进制数字。指数由   大写或小写的p前缀后跟一个十进制序列   数字,表示p之前的值是2的幂   乘以。例如,0xFp2表示15×2 2 ,其进行评估   类似地,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

此格式与%a printf格式非常相似(例如,请参阅 http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html)。 它可以用于直接在其中指定浮点数 二进制IEEE 754表示,请参阅Why does Swift use base 2 for the exponent of hexadecimal floating point values? 了解更多信息。

答案 1 :(得分:4)

使用场所价值系统解释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)

所以把它们放在一起

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

答案 2 :(得分:0)

正如你所说,

0xC是12。小数部分为((1/16)* 3)* 10 ^ 0。

所以你需要取小数部分除以16.然后你需要将它乘以p

之后的数字乘以2

答案 3 :(得分:0)

为了总结我所阅读的内容,您可以看到以下表示:

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

来自Martin R的上述例子:

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

答案 4 :(得分:0)

十六进制-(0-9,A=10,B=11,C=12,D=13,E=14,F=15)p0表示2^0 例如:- 0xC = 120x前缀代表十六进制) 在0xC.3p0中的小数部分之后,我们将数字除以16的幂

所以这里3/16 = 0.1875 所以0xC.3p0 = (12 + (3/16) ) 2^0

如果是0xC.43p0那么对于4我们将使用4/(16),对于3,我们将使用3/(16 ^2),并且如果小数部分增加则类似。

ex:0xC.231p1 = (12 + 2/16 + 3/(256) + 1/(16^3)) 2^1 = 24.27392578125