期待どおりに動作しない単純なコードがあります。このコードの何が問題になっていますか?
int value1 = (int).5*100;
これはかなり簡単ですが、良い瞬間のループのために私を介して. もちろん、答えは自明であり、すでに知られています。でも、誰かが考えるのは楽しいかもしれないと思いました。
正しい解決策を思いつき、その理由を説明した最初の人にクレジットが与えられます。
期待どおりに動作しない単純なコードがあります。このコードの何が問題になっていますか?
int value1 = (int).5*100;
これはかなり簡単ですが、良い瞬間のループのために私を介して. もちろん、答えは自明であり、すでに知られています。でも、誰かが考えるのは楽しいかもしれないと思いました。
正しい解決策を思いつき、その理由を説明した最初の人にクレジットが与えられます。
「何が問題なのか」: 括弧の使い方が不十分で、ばかげた優先順位規則 (人間の目ではなく、コンパイラーを満たすことを目的としています) を覚えて暗唱することを余儀なくされ、書くのが難しく、維持するのがさらに難しくなっています。
意味が少しでも疑わしい場合は、括弧を追加してください。それらが必要ない場合でも。それなら、これは問題外です。そして、何も覚える必要はありません!
コードが次のいずれかのように記述されている場合:
((int)0.5)*100
また:
(int)(0.5*100)
それなら、質問が必要になるとは思えません:)
最初にキャスト.5
するとint
、結果は0
になり、それを掛けると100
結果は (0 * 100) になり0
ます。
それが予想される場合は、50
括弧を使用する必要があります (したがって、乗算が最初に行われ、次に型キャストが行われます)。
int value1 = (int)(.5*100);
かっこは少なくするよりも多くする方が常に良いです。費用はかからず、可読性と理解が向上します。
MSDN ライブラリ:演算子の優先順位と結合性。
キャストの優先順位と関係があります。キャストの優先順位が高いため、乗算演算の前に実行されます。括弧を使用して優先順位を変更する必要があります。次の方法で試してください。
int value1 = (int)(.5 * 100);