2.4.11 Thao tác với bit đơn lẻ (6)

    Ngôn ngữ “C ++” cung cấp cho chúng ta một toán tử khác liên quan đến các bit đơn: shifting (dịch bit). Nó chỉ áp dụng cho các giá trị nguyên và bạn không thể sử dụng nó với float. Thật ra bạn đã và đang sử dụng phép dịch rồi đấy. Làm thế nào để bạn nhân số bất kỳ với 10? Hãy xem:

12345 * 10 = 123450

Như bạn thấy, nhân với 10 chỉ đơn giản là chuyển tất cả các chữ số sang trái và thêm “0” vào bên phải. Làm thế nào để bạn chia cho 10? Hãy xem:

12340 ÷ 10 = 1234

Tất cả bạn phải làm là dịch các chữ số bên sang bên phải.

Máy tính thực hiện toán tử dịch bit tương tự như vậy nhưng có một điểm khác biệt: dịch một giá trị sang trái 1 bit thì tương đương với việc nhân nó với 2; dịch sang phải 1 bit tương đương chia cho 2 (chú ý rằng khi dịch sang phải thì bit ngoài cùng bên phải sẽ bị mất).

Việc dịch bit có thể là:

  • Dịch bit logic: nếu tất cả các bit của biến đều được dịch; loại dịch bit này xảy ra khi bạn áp dụng nó vào các số nguyên unsigned integers;
  • Dịch bit số học: nếu việc dịch bit bỏ qua cái gọi là bit dấu, bit dấu là bit cao nhất của một biến; nếu nó bằng “1”, giá trị được coi là số âm; điều này có nghĩa là phép dịch bit số học không thể thay đổi dấu của giá trị được dịch.

Các toán tử dịch bit trong ngôn ngữ C++ bảo gồm một cặp là << và >>, ký hiệu đã chỉ ra rõ ràng hướng việc dịch bit sẽ được thực hiện. Đối số bên trái của các toán tử này là một giá trị số nguyên mà các bit của nó sẽ được dịch. Đối số bên phải xác định kích thước của việc dịch bit

Ví dụ:

Value << Bits; Value >> Bits;

Độ ưu tiên của các toán tử này là rất cao. Bạn sẽ thấy chúng trong bảng cập nhật độ ưu tiên các toán tử ở phần cuối của chương này.