IEEE浮点表示

时间:2011-05-19 14:40:08

标签: c floating-point ieee-754

我创建了以下程序来查找浮点数的位模式。但我得到了不同然后我计算:

#include<stdio.h>

int main(void){
    float f = 1.234;
    char *ch;
    ch = (char *)(&f);
    printf("\n%d\n", *ch);
    ch++;
    printf("\n%d\n", *ch);
    ch++;
    printf("\n%d\n", *ch);
    ch++;
    printf("\n%d\n", *ch);

//  printf("%d %d %d %d", *ch, *(ch+1), *(ch+2), *(ch+3));
    printf("\n%f %e", f, f);
    return 0;
}

它给了我输出:

-74

-13

-99

63

1.234000 1.234000e+00

这是什么意思,因为我期待位模式为:

00111111 10111011 11100111 0110110

我错了,请纠正我

3 个答案:

答案 0 :(得分:4)

我不确定你从哪里得到那个位模式。

对于IEEE-754,1.234相当于0x3F9DF3B6的基础表示(参见例如http://babbage.cs.qc.edu/IEEE-754/Decimal.html)。所以我们有:

0x3F = 00111111 =  63
0x9D = 10011101 = -99 (as a signed char)
0xF3 = 11110011 = -13
0xB6 = 10110110 = -74

根据您的系统字节顺序,您可能会发现这些字节以其他顺序出现。

答案 1 :(得分:1)

标准C中没有内置二进制printf格式。如果这是您想要的输出格式,则需要编写自己的格式。您可以通过使用%x来查看十六进制输出;也许这会得到你所需要的东西?

答案 2 :(得分:0)

您期望的位模式是错误的,它应该是:

{"00111111", "10011101", "11110011", "10110110"} = {63, -99, -13, -74}

可以准确地生成你得到的数字。

符号,指数和重要性是:     0,127,1962934