比較表
比較基準 | & | && |
---|---|---|
オペレーター | それは "ビット演算子"です。 | これは「論理演算子」です。 |
評価 | 式の左辺と右辺の両方を評価します。 | 式の左側のみを評価します。 |
に作用する | これは、 "ビット"だけでなく "ブールデータ型"にも作用します。 | これは "ブールデータ型"でのみ機能します。 |
つかいます | 論理状態をチェックするために使用し、パリティビットなどの特定のビットをマスクオフするためにも使用します。 | 論理状態をチェックするためだけに使用されます。 |
&(ビットAND)の定義
この '&'演算子は、論理(&)演算子とビット演算子の両方として使用されます。 バイナリデータだけでなくブール値でも動作します。 その場合、&演算子が論理&演算子として使用されると、評価式の両側が真であれば「真」となり、そうでなければ「偽」が返されます。 これにより、コンパイラは式の両側を評価できます。 つまり、式の左側がfalseになっても、式の右側が評価されます。
例でこれを理解しましょう。
int a = 4、b = 5。 system.out.println((a == 6)&(b ++ == 6)); system.out.println( "b =" + b); // falseを出力するb = 5
ここで、式の左側(a == 6)を評価すると、結果は偽になり、&演算子は式の右側(b ++ == 6)を評価します。その結果、bの値が増加します。
「&」を「ビット演算子」として使用すると、最初に両方のオペランドを2進形式に変換し、次に&演算子を使用してビットごとに演算します。 演算後、得られた結果は2進形式であり、次に10進数に変換されます。 いずれかのオペランドの0であるビットは0になります。両方のオペランドのビットが1の場合、結果のビットは1になります。
&演算子のビット単位の演算を見てみましょう。
int a; a = 3&4。 // 011&100 = 000 system.out.println( "a =" + a); // a = 0を出力
ここでは、10進値3と4が最初に2進形式に変換され、次に&bitwise演算子がそれらに対して1ビットずつ&演算を実行します。 得られた結果は2進形式であり、それは次に10進形式に再度変換されます。
&&の定義(短絡AND)
この&&演算子は完全に論理演算子として機能します。 ブールデータ型でのみ動作します。 これは短絡演算子とも呼ばれます。 式の左側だけをチェックするので。 式の左辺が偽になっても、式の右辺を評価することは問題になりません。
例を使って&&演算子の働きを理解しましょう。
int a = 4、b = 5。 system.out.println((a == 6)&&(b ++ == 6)); system.out.println( "b =" + b); // falseを出力するb = 4
ここでは、条件(a == 6)が偽であるため、&&演算子は結果として式(b ++ == 6)を評価せず、bの値は増加しません。
&と&&の主な違い
- &演算子は、ブール値とバイナリデータの両方で機能するため、論理演算子でもビット演算子でもあります。
- &演算子は式の両側を評価して最終結果を得ますが、&演算子は式の左側のみを評価します。falseの場合は式の右側も評価しません。
注意:
ブールデータ型を評価している間、両方の演算子は、両方のオペランドが真の場合にのみ「真」となり、それ以外の場合は「偽」を返します。
結論:
&と&&演算子はどちらもブール条件を評価するために使用されますが、&演算子はビット演算にも使用されます。 式の両側を評価する必要がある場合は&演算子が使用され、それ以外の場合は&&演算子を使用できます。