-6

期待どおりに動作しない単純なコードがあります。このコードの何が問題になっていますか?

int value1 = (int).5*100;

これはかなり簡単ですが、良い瞬間のループのために私を介して. もちろん、答えは自明であり、すでに知られています。でも、誰かが考えるのは楽しいかもしれないと思いました。

正しい解決策を思いつき、その理由を説明した最初の人にクレジットが与えられます。

4

3 に答える 3

16

「何が問題なのか」: 括弧の使い方が不十分で、ばかげた優先順位規則 (人間の目ではなく、コンパイラーを満たすことを目的としています) を覚えて暗唱することを余儀なくされ、書くのが難しく、維持するのがさらに難しくなっています。

意味が少しでも疑わしい場合は、括弧を追加してください。それらが必要ない場合でも。それなら、これは問題外です。そして、何も覚える必要はありません!

コードが次のいずれかのように記述されている場合:

((int)0.5)*100

また:

(int)(0.5*100)

それなら、質問が必要になるとは思えません:)

于 2012-07-22T09:43:16.897 に答える
10

最初にキャスト.5するとint、結果は0になり、それを掛けると100結果は (0 * 100) になり0ます。

それが予想される場合は、50括弧を使用する必要があります (したがって、乗算が最初に行われ、次に型キャストが行われます)。

int value1 = (int)(.5*100);

かっこは少なくするよりも多くする方が常に良いです。費用はかからず、可読性と理解が向上します。

MSDN ライブラリ:演算子の優先順位と結合性

于 2012-07-22T09:42:11.480 に答える
3

キャストの優先順位と関係があります。キャストの優先順位が高いため、乗算演算の前に実行されます。括弧を使用して優先順位を変更する必要があります。次の方法で試してください。

int value1 = (int)(.5 * 100);
于 2012-07-22T09:43:47.687 に答える