【问题标题】:Hexadecimal Floating-Point Constant十六进制浮点常数
【发布时间】:2011-12-05 23:07:03
【问题描述】:

下面的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

我不明白如何获得 ex 4 的结果?

【问题讨论】:

    标签: c floating-point hex printf


    【解决方案1】:

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

    那么,你如何处理最后一个?将0.857421875表示为0.857421875 * 2/2,即1.71484375*2-1。现在,你想要十六进制的尾数。 Double 在尾数中有 53 位(包括隐含的 1.),因此这 52(53)位中的 1.71484375 有效地表示为等于 1.71484375*252 = 7722969673498624 = 0x1B700000000000 的整数。所以,你有它,0x1.b7p-1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 2013-08-13
      • 1970-01-01
      • 2014-03-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多