ตัวดำเนินการระดับบิต (&, XOR, <<, ...) - 1

“สวัสดี อามีโก้!”

"อีกหนึ่งบทเรียนเล็กๆ น้อยๆ เกี่ยวกับตัวดำเนินการระดับบิต"

"คุณรู้ว่านอกจากตัวดำเนินการเชิงตรรกะ AND (&&) หรือ (||) และ NOT (!) แล้ว ยังมีตัวดำเนินการระดับบิต AND (&) หรือ (|) ไม่ใช่ (~) และ XOR(^ ), ขวา?"

"ใช่ บิลาโบเคยให้บทเรียนที่ดีมากเกี่ยวกับเรื่องนี้"

"เกี่ยวกับโอเปอเรเตอร์เหล่านี้ ฉันมีสองเรื่องที่จะบอกคุณ:"

"อย่างแรก ยกเว้น 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 เป็นโมฆะ จะเกิดข้อยกเว้นเมื่อคำนวณ c2!"

"อา ตอนนี้ฉันเห็นได้ชัดเจนขึ้นแล้ว"