ตัวดำเนินการ shift ระดับบิตคือตัวดำเนินการ shift ขวา (>>) ซึ่งย้ายบิตของ shift_expression ไปทางขวา และตัวดำเนินการ shift ทางซ้าย (<<) ซึ่งย้าย บิตของ shift_expression ไปทางซ้าย
ตัวดำเนินการ shift ซ้ายทำให้บิตใน shift-expression ถูกเลื่อนไปทางซ้ายตามจำนวนตำแหน่งที่ระบุโดย additive-expression ตำแหน่งบิตที่ว่างโดยการดำเนินการกะจะถูกเติมเป็นศูนย์ การเลื่อนด้านซ้ายเป็นการเลื่อนแบบลอจิคัล (บิตที่เลื่อนออกจากส่วนท้ายจะถูกยกเลิก รวมถึงบิตเครื่องหมายด้วย)
ตัวดำเนินการ shift ขวาทำให้รูปแบบบิตใน shift-expression ถูกเลื่อนไปทางขวาตามจำนวนตำแหน่งที่ระบุโดย additive-expression สำหรับหมายเลขที่ไม่ได้ลงนาม ตำแหน่งบิตที่ว่างจากการดำเนินการกะจะถูกเติมเป็นศูนย์ สำหรับตัวเลขที่ลงนามแล้ว บิตเครื่องหมายจะใช้เพื่อเติมตำแหน่งบิตที่ว่าง กล่าวคือ หากตัวเลขเป็นบวก จะใช้ 0 และหากตัวเลขเป็นลบ จะใช้ 1
ตัวอย่าง
#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; }
ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
8 2
โปรดทราบว่าตัวดำเนินการเหล่านี้มีพฤติกรรมแตกต่างกันมากกับจำนวนลบ ผลลัพธ์ของการเลื่อนไปทางขวาของจำนวนลบที่มีเครื่องหมายนั้นขึ้นอยู่กับการนำไปปฏิบัติ หากคุณเปลี่ยนหมายเลขที่ลงนามไปทางซ้ายเพื่อให้บิตของเครื่องหมายได้รับผลกระทบ ผลลัพธ์จะไม่ถูกกำหนด
นอกจากนี้ยังมีตัวดำเนินการที่ซับซ้อน 2 ตัวที่สามารถใช้เพื่อกำหนดค่าให้กับค่าทางด้านซ้ายโดยตรง นี่คือตัวดำเนินการ <<=และตัวดำเนินการ>>=
อ้างถึง https://msdn.microsoft.com/en-us/library/336xbhcz.aspx สำหรับการตรวจสอบอย่างละเอียดของตัวดำเนินการกะ