Computer >> Máy Tính >  >> Lập trình >> C ++

Toán tử shift trong C ++ là gì?


Toán tử dịch chuyển theo chiều bit là toán tử dịch phải (>>), di chuyển các bit của biểu thức shift sang phải và toán tử dịch chuyển trái (<<), di chuyển các bit của shift_expression ở bên trái.

Toán tử dịch trái làm cho các bit trong biểu thức dịch chuyển sang trái theo số vị trí được chỉ định bởi biểu thức cộng. Các vị trí bit đã bị bỏ trống bởi hoạt động shift sẽ được điền bằng không. Dịch chuyển sang trái là một sự dịch chuyển logic (các bit bị dịch chuyển ra khỏi đầu sẽ bị loại bỏ, bao gồm cả bit dấu).

Toán tử dịch phải làm cho mẫu bit trong biểu thức dịch chuyển sang phải theo số vị trí được chỉ định bởi biểu thức cộng. Đối với các số không có dấu, các vị trí bit đã bị bỏ trống bởi hoạt động shift sẽ được điền bằng không. Đối với các số có dấu, bit dấu được sử dụng để điền vào các vị trí bit còn trống. Nói cách khác, nếu số dương, 0 được sử dụng và nếu số âm, 1 được sử dụng.

ví dụ

#include<iostream>
using namespace std;
int main() {
   int a = 1, b = 3;
   
   // a right now is 00000001
   // Left shifting it by 3 will make it 00001000, ie, 8
   a = a << 3;
   cout << a << endl;
   
   // Right shifting a by 2 will make it 00000010, ie, 2
   a = a >> 2;
   cout << a << endl;
   return 0;
}

Đầu ra

Điều này sẽ cung cấp đầu ra -

8
2

Lưu ý rằng các toán tử này hoạt động rất khác với các số âm. Kết quả của việc chuyển sang phải một số âm có dấu phụ thuộc vào việc thực hiện. Nếu bạn dịch sang trái một số có dấu để bit dấu bị ảnh hưởng, kết quả là không xác định.

Ngoài ra còn có 2 toán tử phức tạp có thể được sử dụng để gán giá trị trực tiếp cho giá trị bên trái. Đây là toán tử <<=và toán tử>> =.

Tham khảo https://msdn.microsoft.com/en-us/library/336xbhcz.aspx để kiểm tra chi tiết hơn về các nhân viên vận hành ca.