Toán tử bitwise (&, XOR, <<, ...) - 1

"Chào, Amigo!"

"Thêm một bài học nhỏ nữa về toán tử bitwise."

"Bạn biết rằng ngoài các toán tử logic AND (&&), OR (||) và NOT (!), còn có các toán tử bit AND (&), OR (|), NOT (~) và XOR(^ ), Phải?"

"Phải. Bilaabo đã từng dạy một bài học rất hay về điều này."

"Chà, về những người điều hành này. Tôi có hai điều muốn nói với bạn:"

"Đầu tiên, ngoại trừ NOT (~), chúng có thể được áp dụng cho các biến boolean, giống như các toán tử logic."

"Thứ hai, đánh giá lười biếng không áp dụng cho họ."

"Hãy xem ví dụ này:"

Mã số mã tương đương
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());
  }
 }
}

"Bên trái có nhỏ gọn hơn bên phải không?"

"Chuẩn rồi."

"Và nó có cùng ý nghĩa không?"

"Chuẩn rồi."

"Hoàn toàn đúng. Nhưng bây giờ hãy xem biểu thức tương tự bằng cách sử dụng toán tử bitwise :"

Mã số mã tương đương
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());
 }
 }
}

"Nói cách khác, mã giống nhau, nhưng tuyệt đối mọi thao tác sẽ được thực hiện."

"Lưu ý rằng nếu a là null, một ngoại lệ sẽ được đưa ra khi tính toán c2!"

"À. Tôi có thể thấy điều đó rõ ràng hơn rồi."