在下面的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的结果?
答案 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。