1

次のコードでは:

float x = 0.23;
int z;

z = x;

if (x)
    printf("float %f will not be converted to 0!\n", x);

if (z)
    printf("this will not print!\n");

if浮動小数点数は整数に変換され、ステートメントで使用されるときにゼロかどうかがチェックされると思いました。誰かが私に説明してもらえますか、なぜそうではないのですか?

編集:

(何が混乱していたかを明確にするために)<returnのような論理演算子なので、ステートメントは整数値を受け取るので、変換を行う必要があるintと思いました。if答えで指摘されているように、そうではありません。みんなありがとう!

4

5 に答える 5

5

浮動小数点数は整数に変換され、ifステートメントで使用されるときにゼロかどうかがチェックされると思いました。

いいえ、ゼロと比較されます。算術型をブール値に変換するための規則は、C ++114.12に記載されています。

ゼロ値[...]はfalse;に変換されます。その他の値はに変換されtrueます。

于 2013-02-21T10:58:38.943 に答える
4
  1. タイプ変換は他のタイプで操作するときに発生し、整数はそれらの間で操作するときにfloatに変換されます。例:x + z//zは"x"で追加する前に"float"に変換されます
  2. 「if()」で論理条件として使用した場合、「null/ゼロかどうか」のみが判断されます。0.23はゼロ/ヌルではないため、結果はTRUEになります。
于 2013-02-21T11:13:22.330 に答える
2

ifコンパイラは、の引数がであるかどうかのみをチェックしますzero。そうでない場合、条件はtrueです。変換はまったく行われません。

于 2013-02-21T10:31:58.997 に答える
1

ブールコンテキストでfloatを使用する場合、最初にintに変換せずに、ゼロかどうかが直接チェックされます。です0.23ftrue(int)0.23fですfalse

于 2013-02-21T10:33:04.687 に答える
1

最初のテストはテストxであるfloatため、そこで「変換」は発生しません。

基本的に、ifは式が0またはゼロ以外であるかどうかをチェックし、コードが実行されるように0.23がゼロ以外であることは明らかです。

あなたは考えることができます

if(x)

と同じであるとして

if(x != 0)
于 2013-02-21T10:32:48.100 に答える