โอเปอเรเตอร์ 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 สำหรับจำนวนเต็มลบ:
3ใน 32 บิต:00000000 00000000 00000000 00000011~3(กลับบิต):11111111 11111111 11111111 11111100- ค่านี้ใน 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 บิตจะถูกตัดทอน