Menu
CoddyTech

Toán tử dịch phải và dịch trái

Bài học 7 trên 17 trong khóa học Thao tác bit của Coddy.

Toán tử dịch bit dùng để dịch các bit sang trái hoặc sang phải. 

Toán tử dịch phải ( >> )

Toán tử này nhận hai toán hạng. Giá trị thứ nhất là số có các bit cần dịch sang phải, còn toán hạng thứ hai là số vị trí cần dịch. Về cơ bản, ta đẩy các số 0 từ phía MSB vào số nhị phân.

Dịch phải được ký hiệu là '>>' . 

Dịch phải tương đương với việc chia số đó cho một lũy thừa của hai. Hãy cùng tìm hiểu qua hình minh họa.

Ta lấy (11)10 rồi dịch sang phải 3 lần, kết quả là (1)10 . Ta cũng có thể tính bằng cách lấy phần nguyên của (11 / 23), kết quả chính là (1)10.  

Cách dùng:

int a = 11;
a>>3;
OUTPUT: 1

Ở đây, a là số có các bit cần dịch, còn 3 là số vị trí cần dịch sang phải.

Toán tử dịch trái ( << )

Toán tử này cũng nhận hai toán hạng. Toán hạng thứ nhất là số có các bit cần dịch sang trái, còn toán hạng thứ hai là số vị trí cần dịch. Về cơ bản, ta đẩy các số 0 từ phía LSB vào số đó. Dịch trái được ký hiệu là '<<' . Dịch trái tương đương với việc nhân số đó với một lũy thừa của hai. Hãy cùng tìm hiểu qua ví dụ tương tự.

Ta lấy (11)10 rồi dịch sang phải 3 lần, kết quả là (88)10 . Ta cũng có thể tính bằng cách nhân (11)10 với 23, kết quả là (88)10. Lưu ý rằng trong trường hợp này, ta không thể xóa các bit MSB. Dịch trái sẽ làm tăng số bit và đẩy các số 0 từ phía LSB vào, nhưng không xóa các bit MSB. Còn khi dịch phải, ta đẩy các số 0 từ phía MSB vào và các bit bên trái sẽ bị loại bỏ.

Cách dùng:

int a = 11;
a<<3;
OUTPUT: 88
challenge icon

Thử thách

Dễ

Nhân đôi số đã cho (đầu vào) bằng toán tử dịch bit.

Tự làm thử

#include <iostream>
#include <vector>
using namespace std;

int Double(int num) {
    // Viết code tại đây
}

Tất cả bài học trong Thao tác bit

Tự luyện tập: Trình biên dịch C++ online

Kiểm tra một phép chuyển đổi: Công cụ chuyển đổi hệ cơ số