Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 시프트 연산자는 무엇입니까?


비트 시프트 연산자는 shift_expression의 비트를 오른쪽으로 이동하는 오른쪽 시프트 연산자(>>)와 왼쪽으로 shift_expression 비트.

왼쪽 시프트 연산자는 shift-expression의 비트가additive-expression에 의해 지정된 위치 수만큼 왼쪽으로 시프트되도록 합니다. 시프트 연산에 의해 비워진 비트 위치는 0으로 채워집니다. 왼쪽 시프트는 논리적 시프트입니다(끝에서 시프트된 비트는 부호 비트를 포함하여 버려집니다).

오른쪽 시프트 연산자는 shift-expression의 비트 패턴이additive-expression에 의해 지정된 위치 수만큼 오른쪽으로 시프트되도록 합니다. 부호 없는 숫자의 경우 시프트 연산으로 비워진 비트 위치는 0으로 채워집니다. 부호 있는 숫자의 경우 부호 비트는 비어 있는 비트 위치를 채우는 데 사용됩니다. 즉, 숫자가 양수이면 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를 참조하십시오.