2011-05-19 52 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