十六进制浮点常数

时间:2011-10-12 09:05:04

标签: c floating-point hex printf

在下面的C程序中,使用十六进制浮点常量

double d;
d = 2;
 printf("Ex 1: 2 in hex: %a\n\n",d);

 d = 256;
 printf("Ex 2: 2^8 in hex: %a\n\n",d);

 d = 0.015625; //= 2^-6
 printf("Ex 3: 2^-6 in hex: %a\n\n",d);

 d = 0.857421875;
 printf("Ex 4: 0.857421875 in hex: %a\n\n",d);

结果是:

Ex 1: 2 in hex: 0x1p+1

Ex 2: 2^8 in hex: 0x1p+8

Ex 3: 2^-6 in hex: 0x1p-6

Ex 4: 0.857421875 in hex: 0x1.b7p-1

我不明白如何得到前4的结果?

1 个答案:

答案 0 :(得分:6)

浮点数中的尾数通常用大于或等于1但小于2的数字表示。在所有示例中,它都等于1,但最后一个。

那么,你最后一个怎么办?将0.857421875重新表示为0.857421875 * 2/2,即1.71484375 * 2 -1 。现在,你想要十六进制的尾数。 Double在尾数中具有53位(包括隐含的1),因此在那些52(53)位中的1.71484375实际上表示为等于1.71484375 * 2 52 = 7722969673498624 = 0x1B700000000000的整数。所以,你有它,0x1.b7p-1。