簡體   English   中英

IEEE浮點表示

[英]IEEE floating point representation

我創建了以下程序來查找浮點數的位模式。 但是我得到了不同,然后我計算出:

#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

我錯了,請糾正我

我不確定您從何處獲得該位模式。

對於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

根據您的系統字節順序,您可能會發現這些字節以其他順序出現。

標准C中沒有內置的二進制printf格式。如果這是您想要的輸出格式,則需要編寫自己的格式。 您可以使用%x來查看十六進制輸出,從而更加接近; 也許那會給您您所需要的?

您期望的位模式是錯誤的,應該是:

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

確切地得出您得到的數字。

符號,指數和有效位數分別是:0,127,1962934

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM