Toán tử dịch bit: dịch phải (>>) di chuyển bit sang phải, dịch trái (<<) di chuyển bit sang trái.
Dịch trái: bit dịch sang trái số vị trí chỉ định. Vị trí trống lấp bằng 0. Dịch trái là dịch logic (bit bị đẩy ra ngoài bị loại, kể cả bit dấu).
Dịch phải: mẫu bit dịch sang phải. Với số unsigned, vị trí trống lấp 0. Với số signed, bit dấu dùng để lấp (số dương lấp 0, âm lấp 1).
Ví dụ
#include <iostream>
using namespace std;
int main() {
int a = 1, b = 3;
a = a << 3; // 00000001 -> 00001000 = 8
cout << a << endl;
a = a >> 2; // 00001000 -> 00000010 = 2
cout << a << endl;
return 0;
}
Đầu ra
8 2
Lưu ý: hành vi khác với số âm. Dịch phải số signed âm phụ thuộc implementation. Dịch trái số signed làm ảnh hưởng bit dấu → hành vi không xác định.
Còn có toán tử gán kết hợp: <<= và >>=.