ビット演算子 (&、XOR、<<、...) - 1

「こんにちは、アミーゴ!」

「ビット演算子についてもう 1 つ簡単なレッスンを。」

「論理演算子 AND (&&)、OR (||)、NOT (!) に加えて、ビット演算子 AND (&)、OR (|)、NOT (~)、および XOR(^) があることはご存知でしょう。 )、 右?"

「そう。ビラーボはかつてこのことについてとても良い教訓を与えてくれました。」

「それでは、これらの演算子についてです。お伝えしたいことが 2 つあります。」

「まず、NOT (~) を除いて、論理演算子と同じようにブール変数に適用できます。」

「第二に、遅延評価は適用されません。」

「この例を見てください:」

コード 同等のコード
if (a != null && a.getName() != null && c != null)
{
 c.setName(a.getName());
}
if (a != null)
{
 if (a.getName() != null)
 {
  if (c != null)
  {
   c.setName(a.getName());
  }
 }
}

「左側の方が右側よりコンパクトですか?」

「はい。」

「それと同じ意味ですか?」

「はい。」

「その通りです。しかし、ビットごとの演算子を使用して同じ式を見てみましょう。」

コード 同等のコード
if (a != null & a.getName() != null & c != null)
{
 c.setName(a.getName());
}
boolean c1 = (a != null);
boolean c2 = (a.getName() != null);
boolean c3 = (c != null);
if (c1)
{
 if (c2)
 {
  if (c3)
  {
   c.setName(a.getName());
 }
 }
}

「言い換えれば、コードは同じですが、絶対にすべての操作が実行されます。」

「a が null の場合、c2 を計算するときに例外がスローされることに注意してください。」

「ああ、今はそれがよりはっきりとわかるようになりました。」