2016-09-08 9 views
-1

私はクラスの最初の数日間はCに潜入しています。私の教授は私たちのために挑戦の質問/より多くを提案したので私はここにそれを提案すると思った。Cで浮動小数点数を変換して二進数を表示

float x,y,z; 
x = 0.0; 
y = 1.0; 
z = -2.5; 

彼は、彼はまた、労働組合を使用するように示唆した私たちは、など%xを使用せずに、バイナリと16進でこれらの番号を表示したい:

union U { 
float y; 
unsigned z; 
}; 

は、事前にお時間をいただき、ありがとうございます。私はちょうどそのような変換を開発する方法についてのヘルプ/説明を探しています。

+0

「符号なし整数」のサイズは「float」と同じです... – LPs

+1

言語弁護士は教授が犯罪を犯していると言います。 –

+1

**あなたの**挑戦ですか?私たちは試験を受けるのですか? – Olaf

答えて

1

厳密なエイリアシングルールに違反しない正しい方法は、C標準で許可されているchar配列のfloatをエイリアスすることです。

union U { 
    float y; 
    char c[sizeof (float)]; 
}; 

あなたがc配列を使用して、個々のfloat y;バイトにアクセスし、簡単に周りに見つけることができる非常に単純なアルゴリズムを使用してバイナリ/進に変換することができるようになります。この方法は、(私はあなたにそれを任せます、それはあなたの課題です)。

+0

'unsigned char'は' char'よりも移植性の点で優れているので、まれに 'char'がトラップ値を持つ可能性があります。さらに、 '' char''は '' signed''と呼ばれ、hex/binary表示への変換を少し複雑にします。 – chux

+0

@chux私は 'unsigned'を書くことを検討していました。しかし、ノイズを減らすためにそれを放置することに決めました。 –

+0

@EugeneSh。助けてくれてありがとう – zessed

関連する問題