Định nghĩa
a << b dịch bit của a sang trái b vị trí. Lấp 0 vào bên phải. Bit tràn bên trái bị loại bỏ.
Ví dụ
<script>
var a = 2; // 10
var b = 3; // 11
document.write("(a << b) = " + (a << b)); // 16 (10000)
</script>
Tương đương toán học
Dịch trái n bit = nhân 2^n (trong phạm vi 32-bit signed int).
1 << 0 // 1
1 << 1 // 2
1 << 2 // 4
1 << 3 // 8
5 << 2 // 20 (5 * 4)
Tràn số (overflow)
JS bitwise luôn làm việc trên signed 32-bit. Dịch trái có thể thay đổi dấu:
0x40000000 << 1 // 1073741824 << 1 = -2147483648 (tràn thành âm)
0x40000000 << 2 // 0 (bit 1 bị đẩy ra ngoài 32-bit)
Ứng dụng
- Tạo bitmask:
1 << ntạo mask cho bit thứ n. - Nhân nhanh lũy thừa 2 (compiler tự tối ưu).
- Pack/unpack dữ liệu:
(r << 16) | (g << 8) | b(RGB → int). - Hash, crypto, graphics.
Lưu ý
- Toán hạng phải (số bit dịch) lấy modulo 32:
a << 33 === a << 1. - Kết quả là signed 32-bit int.