我不明白浮点数是如何用Swift中的十六进制表示法表示的。 Apple的文档显示0xC.3p0等于十进制的12.1875。有人可以告诉我如何进行转换吗?我明白在十进制十六进制值0xC = 12之前。小数点后的3p0是我难倒的地方。
答案 0 :(得分:7)
浮点文字
...
十六进制浮点文字由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
答案 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 = 12
(0x
前缀代表十六进制)
在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