โอเปอเรเตอร์ Left Shift แบบบิตเวิร์ส (<<) เลื่อนบิตของ operand ตัวแรกไปทางซ้ายตามจำนวนบิตที่ระบุโดย operand ตัวที่สอง บิตใหม่ทางขวาจะถูกเติมด้วย 0 เสมอ (Logical Left Shift) บิตที่เลื่อนออกไปทางซ้ายจะหายไป
ตัวอย่างโค้ด
<html>
<body>
<script>
var a = 2; // บิต: 10
var b = 3; // เลื่อน 3 บิต
document.write("(a << b) => ");
result = (a << b);
document.write(result); // ผลลัพธ์: 16 (บิต: 10000)
</script>
</body>
</html>
ความสัมพันธ์กับการคูณ
การเลื่อนซ้าย n บิต เทียบเท่ากับการคูณด้วย 2^n:
x << 1=x * 2x << 2=x * 4x << 3=x * 8
กรณีพิเศษและข้อจำกัด
- Operand จะถูกแปลงเป็น 32-bit signed integer ก่อนดำเนินการ
- จำนวนบิตที่เลื่อนจะทำ modulo 32 (เช่น
<< 33=<< 1) - อาจเกิด Overflow ได้ หากบิตเครื่องหมาย (MSB) เปลี่ยนค่า
- สำหรับจำนวนใหญ่ ควรใช้
BigIntแทน (เช่น2n << 3n)
การประยุกต์ใช้
- การคูณด้วยกำลังของ 2 อย่างรวดเร็ว
- การสร้าง Bit Mask (เช่น
1 << nสร้างมาสก์ที่บิต n) - การเข้ารหัส/บีบอัดข้อมูลระดับต่ำ
- การจัดการสีในรูปแบบ RGB (เช่น
(r << 16) | (g << 8) | b)