Bitwise shift operators คือ right-shift operator (>>) ซึ่งเลื่อนบิตของ shift_expression ไปทางขวา และ left-shift operator (<<) ซึ่งเลื่อนบิตไปทางซ้าย
Left-shift operator ทำให้บิตใน shift-expression เลื่อนซ้ายตามจำนวนตำแหน่งที่ additive-expression ระบุ ตำแหน่งบิตที่ว่างจากการเลื่อนจะถูกเติมศูนย์ (zero-filled) Left shift เป็น logical shift (บิตที่เลื่อนออกไปทิ้ง รวมถึง sign bit)
Right-shift operator ทำให้รูปแบบบิตใน shift-expression เลื่อนขวาตามจำนวนตำแหน่งที่ additive-expression ระบุ สำหรับ unsigned numbers ตำแหน่งที่ว่างจะถูกเติมศูนย์ สำหรับ signed numbers sign bit ถูกใช้เติม นั่นคือถ้าเลขบวก ใช้ 0 ถ้าเลขลบ ใช้ 1
ตัวอย่าง
#include <iostream>
using namespace std;
int main() {
int a = 1, b = 3;
// a ตอนนี้คือ 00000001
// Left shift 3 ทำให้เป็น 00001000 คือ 8
a = a << 3;
cout << a << endl;
// Right shift a 2 ทำให้เป็น 00000010 คือ 2
a = a >> 2;
cout << a << endl;
return 0;
}
ผลลัพธ์
8 2
โปรดทราบว่า operators เหล่านี้พฤติกรรมต่างออกไปกับเลขลบ ผลลัพธ์ของ right-shift signed negative number เป็น implementation-dependent หาก left-shift signed number ทำให้ sign bit ถูกกระทบ ผลลัพธ์เป็น undefined
ยังมี complex assignment operators คือ <<= และ >>= สำหรับกำหนดค่าตรงๆ ให้ตัวแปรทางซ้าย
อ้างอิงรายละเอียดเพิ่มเติมได้ที่ MSDN