Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวดำเนินการกะใน C ++ คืออะไร


ตัวดำเนินการ 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 สำหรับการตรวจสอบอย่างละเอียดของตัวดำเนินการกะ