2016-05-15 5 views
-1

私はこの一見単純な質問はどこでも答えられませんでした。 x> = 0またはx> -1を使用して整数を0と比較する方が良いですか?x> = 0またはx> -1を使用する方が良いですか

どちらの点でも目立った違いはないと確信していますが、内側の動作をよりよく理解することは面白いでしょう。私は特にJavaについて話していますが、他の言語が異なる場合は、知ることは面白いでしょう。私がうまく言えば、x> = 0の方が読みやすくなることは明らかです。

+4

は私がのためにそれはかなり確信しています現代のCPUには '> ='と '>'の両方にCPU命令があります。したがって、パフォーマンスの代わりに可読性を向上させる必要があります。 – Turing85

+0

おそらくいくつかのプロファイリングがありますが、上記のTuring85の観察に基づいてx> = 0と考えるべきです – saml

+1

基礎となるテストが<0、<= 0、== 0に基づいているので、 != 0、> = 0、> 0 – MikeJRamsey56

答えて

1

質問に答えられないため、回答を見つけることができませんでした。私はif (i > 50) i=50のようなコードを見てきました

は、バイトコード命令でこのような何かにコンパイルします。

Address   Hex    Opcode    Operand 
.... 
0000002D  3B    istore_0 
0000002E  10 32   bipush    50 
00000030  A4 00 06  if_icmple   pos.00000036 
00000033  10 32   bipush    50 
00000035  3B    istore_0 
00000036  .... 

if_icmple:VALUE1だから明らかにbranchoffset

の命令未満または値2に等しく、支店の場合コンパイラはif (i > 50) i=50if (i <=50)のように変換しましたが、割り当てi=50をスキップします。コンパイル時にコンパイラが式を変更したり、if文を逆コンパイルしたりする可能性があるため、あなたが示唆しているような式を変更するのは役に立たないことが、より効率的であれば分かりません。

また、私のCPUはjavaバイトコードを理解しませんが、javaバイトコードはjitコンパイラによってmachinecodeに変換されます。また、jitコンパイラでも最適化を行うことができます。したがって、Javaバイトコードを調べても決定的なものにはなりません。そしてあなたは私があなたのプログラムを実行しているCPUやDVDを知らないので、あなたは単に知ることができません!

(あなたは答えを知っている可能性さえあれば、そのようなマイクロ最適化のための読みやすさを犠牲にすることは良いアイデアではありません。メリットは多大なコストで、非常に少ないだろう!)

+0

これはまさに私が探していたものでした、ありがとう! – Prime624

1

この場合、実際には関係ありません。 x >= 0x > -1の違いは、整数を扱うときは関係ありません。

ここで違いは全くないとは限りません。 >=は「より大きいか等しい」をチェックし、>は「より大きい」のみをチェックします。ここで整数だけでなく浮動小数点数を扱っている場合は、x >= 0を使用することをお勧めします.x > -1は負のx値であると評価され、0と正の数値に加えて-1 < x < 0です。

は今、私は個人的にあなたが>=>(または<=<)の間で選択する必要がどのような場合には、あなたは浮動小数点数を扱うときに正しいだろういずれかを選択することをお勧めします。技術的には厳密に整数を扱うのは技術的に重要ではありませんが、どちらを使用しても同じ結果が得られる場合でも、常に2つの違いを考慮することをお勧めします。

関連する問題