1

これは非常に基本的なことかもしれませんが、その理由は何なのか非常に興味があります。

さまざまなタイプ (int、float など) のデータを使用した乗算や除算など、さまざまなタイプの演算を処理する場合、どのデータ型が選択されるかを決定するものは何ですか?

たとえば、次のようにすると:

float a = 5 / 10;

5 と 10 は、除算を行う int に一時的に格納され、それを float に入れるため、結果として "0" が得られます。右?

しかし、代わりに次のようにすると:

float a = (float)5 / 10;

代わりに 0.5 を取得します。

この場合、C で float が int より優先される場合、意思決定はどのように見えますか?

4

3 に答える 3

2

言語が異なれば、これは異なる方法で処理されます。型変換に関する特定の規則は、言語仕様の一部です。

C のルールは ANSI 仕様で説明されてい ます。

于 2012-04-19T04:15:35.833 に答える
2

このスニペットを見てください。

float a = 5 / 10;

5デフォルトで10は、C (および Java と C++ と Python 2.x) に対して整数として表されます。他の方法で保存するように指定されていません。つまり、浮動小数点型の外観と一致しません。整数除算は切り捨てになるため、毎回値 0 が得られます。

さて、2番目のスニペットに関して:

float a = (float)5 / 10;

...C (または Java、C++、Python 2.x) は、次のように解釈します。

float a = 5.0 / 10;

浮動小数点値は整数よりもランクが高いため、整数を浮動小数点数に昇格させます。これは型昇格と呼ばれます。ここで少し読むことができます。

于 2012-04-19T04:25:45.190 に答える
1

コンパイラーは通常、「意味を理解しよう」とはしません。毎回正しく理解することは不可能だからです。

彼らは、厳密な一連の規則に従って、あなたが言うことをするだけです。

ここでのルールは次のとおりです。整数を別の整数で割ると、整数が返されます。したがって、浮動小数点除算が必要な場合は、浮動小数点数を除算するだけです。

于 2012-04-19T04:16:17.590 に答える