0

したがって、言語 C の数値 1.0 の 16 進数表現を確認したいのですが、以下は私のコードです。

int main(int argc, char **argv)
{
    void showBytes(unsigned char * p,int size){
        int i;
        for (i=0;i<size;i++){
            printf("%.2x",p[i]);
        }
    }

    float f;
    f=1.0;
    showBytes((unsigned char *)&f,sizeof(f));
    return 0;
}

プログラムをビルドして実行すると、1.0(00003039) の正しい表現ではない 39300000 が返されます。この間違った値を取得する理由を誰かに説明できますか? ありがとう!!!

4

1 に答える 1

10

これはエンディアンの不一致です。あるエンディアン規則を使用して値を表示していますが、期待値は他の規則を使用しています。

エンディアンは整数データ型のよく知られた問題ですが、あまり知られていないかもしれませんが、エンディアンは浮動小数点表現にも影響します。

于 2013-06-11T13:30:14.723 に答える