Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

โอเปอเรเตอร์ NOT แบบบิตเวิร์س (~) ใน JavaScript คืออะไร?


โอเปอเรเตอร์ NOT แบบบิตเวิร์ส (~) เป็นโอเปอเรเตอร์แบบ Unary (รับ operand เดียว) ทำงานโดย กลับค่าบิตทุกตัว (Invert bits) คือ บิต 0 กลายเป็น 1 และบิต 1 กลายเป็น 0 นี่คือการหา One's Complement ของตัวเลข

ตัวอย่างโค้ด

<html>
<body>
  <script>
    var b = 3;   // บิต: 000...0011 (32 บิต)
    document.write("(~b) => ");
    result = (~b);
    document.write(result); // ผลลัพธ์: -4
  </script>
</body>
</html>

ทำไม ~3 ถึงได้ -4?

JavaScript ใช้ Two's Complement สำหรับจำนวนเต็มลบ:

  1. 3 ใน 32 บิต: 00000000 00000000 00000000 00000011
  2. ~3 (กลับบิต): 11111111 11111111 11111111 11111100
  3. ค่านี้ใน Two's Complement คือ -4

สูตรทั่วไป: ~x === -(x + 1)

การประยุกต์ใช้ที่นิยม

  • Double Tilde (~~): ใช้แทน Math.floor() สำหรับจำนวนบวก (ดูรายละเอียดในบทความ Double Tilde Operator)
  • ตรวจสอบ indexOf: ~str.indexOf('text') จะเป็น truthy ถ้าพบ (เพราะ -1 กลายเป็น 0 ซึ่งเป็น falsy)
  • การคำนวณดัชนี: ~index แปลง -1 เป็น 0, -2 เป็น 1, ฯลฯ

ข้อควรระวัง

ผลลัพธ์จะเป็น Signed 32-bit Integer เสมอ ค่าที่ใหญ่เกิน 32 บิตจะถูกตัดทอน