ビットごとの&vs論理&&演算子

1.はじめに

Javaでは、「AND」を言う2つの方法があります。しかし、どちらを使用しますか?

このチュートリアルでは、&と&&の違いを見ていきます。そして、その過程でビット演算と短絡について学びます。

2.ビットごとのANDの使用

ビット単位のAND(&)演算子は、2つの整数の各2進数を比較し、両方が1の場合は1を返し、それ以外の場合は0を返します。

2つの整数を見てみましょう。

int six = 6; int five = 5;

次に、これらの数値にビット単位のAND演算子を適用しましょう。

int resultShouldBeFour = six & five; assertEquals(4, resultShouldBeFour);

この操作を理解するために、各数値の2進表現を見てみましょう。

Binary of decimal 4: 0100 Binary of decimal 5: 0101 Binary of decimal 6: 0110

&演算子は、各ビットで論理ANDを実行し、新しい2進数を返します。

0110 0101 ----- 0100

最後に、結果– 0100 –を10進数–4に戻すことができます。

テストJavaコードを見てみましょう。

int six = 6; int five = 5; int resultShouldBeFour = six & five; assertEquals(4, resultShouldBeFour);

2.1。&withブール値の使用

また、ブールオペランドでビット単位のAND()演算子を使用できます。両方のオペランドがtrueの場合にのみtrueを返し、それ以外の場合はfalseを返します。

3つのブール変数を取りましょう:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false;

次に、変数trueBoolanotherTrueBoolにビット単位のAND演算子を適用しましょう。

boolean trueANDtrue = trueBool & anotherTrueBool;

次に、結果はtrueになります

次に、trueBoolfalseBoolにビット単位のAND演算子を適用しましょう。

boolean trueANDFalse = trueBool & falseBool;

この場合、結果はfalseになります

テストJavaコードを見てみましょう。

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false; boolean trueANDtrue= trueBool & anotherTrueBool; boolean trueANDFalse = trueBool & falseBool; assertTrue(trueANDtrue); assertFalse(trueANDFalse);

3.論理積の使用

と同様に、論理AND(&&)演算子は、2つのブール変数または式の値を比較します。また、両方のオペランドがtrueの場合にのみtrueを返し、それ以外の場合はfalseを返します

3つのブール変数を取りましょう:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false;

次に、変数trueBoolanotherTrueBoolに論理AND演算子を適用しましょう。

boolean trueANDtrue = trueBool && anotherTrueBool;

次に、結果はtrueになります

次に、trueBoolfalseBoolに論理AND演算子を適用しましょう:

boolean trueANDFalse = trueBool && falseBool;

この場合、結果はfalseになります

テストJavaコードを見てみましょう。

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false; boolean anotherFalseBool = false; boolean trueANDtrue = trueBool && anotherTrueBool; boolean trueANDFalse = trueBool && falseBool; boolean falseANDFalse = falseBool && anotherFalseBool; assertTrue(trueANDtrue); assertFalse(trueANDFalse); assertFalse(falseANDFalse);

3.1。短絡

それで、違いは何ですか?まあ、&&演算子短絡。これは、左側のオペランドまたは式がfalseの場合、右側のオペランドまたは式を評価しないことを意味します

falseと評価される2つの式を考えてみましょう。

First Expression: 2<1 Second Expression: 4<5 

2 <1および4 <5に論理AND演算子を適用すると、最初の式2 <1のみが評価され、falseが返されます。

boolean shortCircuitResult = (2<1) && (4<5); assertFalse(shortCircuitResult);

3.2。整数での&&の使用

&演算子はブール型または数値型で使用できますが、&&はブールオペランドでのみ使用できます。整数オペランドとともに使用すると、コンパイルエラーが発生します。

int five = 2; int six = 4; int result = five && six;

4.比較

  1. &演算子は常に両方の式を評価しますが、&&演算子は最初の式が真の場合にのみ2番目の式を評価します
  2. &は各オペランドをビット単位で比較しますが、&&はブール値でのみ動作します

5。結論

この記事では、ビットごとの演算子を使用して2桁のビットを比較し、新しい桁を作成しました。また、論理&&演算子を使用して2つのブール値を比較し、ブール値を算出しました。

また、2つの演算子の間にいくつかの重要な違いがありました。

いつものように、このチュートリアルのコードはGitHubにあります。