2011-05-19 50 views
2

我已经创建了以下程序来查找浮点数的位模式。但我有不同的话,我计算:IEEE浮点表示法

#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

其中i我错了请纠正我

+1

为什么你期待的是位模式? – 2011-05-19 14:42:26

回答

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

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

+0

OP还需要使用'unsigned char'而不是'char'。 – 2011-05-19 14:57:47

0

,你想到的是错的位模式,它应该是:

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

产生正是你得到的数字。

的标志,其指数和显著是: 0,127,1962934