ビットごとの&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変数を取りましょう。
boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;
次に、変数trueBoolおよびanotherTrueBoolにビットごとのAND演算子を適用してみましょう。
boolean trueANDtrue = trueBool & anotherTrueBool;
そうすると、結果はtrueになります。
次に、trueBoolとfalseBoolにビットごとの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. 論理およびの使用
3つのboolean変数を取りましょう。
boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;
次に、変数trueBoolおよびanotherTrueBoolに論理AND演算子を適用しましょう。
boolean trueANDtrue = trueBool && anotherTrueBool;
そうすると、結果はtrueになります。
次に、trueBoolとfalseBoolに論理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と評価される2つの式を考えてみましょう。
First Expression: 2<1
Second Expression: 4<5
式に論理AND演算子を適用する場合 2 <1 と 4 <5、 次に、最初の式のみを評価します 2 <1 と戻ります間違い。
boolean shortCircuitResult = (2<1) && (4<5);
assertFalse(shortCircuitResult);
3.2. 整数での&&の使用
&演算子はブール型または数値型で使用できますが、&&はブールオペランドでのみ使用できます。 整数オペランドで使用すると、コンパイルエラーが発生します。
int five = 2;
int six = 4;
int result = five && six;
4. 比較
- &演算子は常に両方の式を評価しますが、&&演算子は、最初の式が次の場合にのみ2番目の式を評価します。 真実
- &は各オペランドをビット単位で比較しますが、&&はブール値でのみ動作します
5. 結論
この記事では、ビット単位を使用しました & 2桁のビットを比較して、新しい桁を生成する演算子。 また、論理を使用しました && 2つのブール値を比較する演算子。結果はブール値になります。
また、2つのオペレーターの間にいくつかの重要な違いがありました。
いつものように、このチュートリアルのコードはGitHubにあります。