Shift operator
- 정수 또는 열거형 표현식의 비트를 오른쪽이나 왼쪽으로 시프팅 하는 연산자.
left shift
: <<
right shift
: >>
- 변수 a를 왼쪽으로 2칸 시프팅 하는것을 기호로
a << 2
로 표현함.
- 변수 a를 오른쪽으로 1칸 시프팅 하는것을 기호로
a >> 1
로 표현함.
- 비트 이동시 이진법의 자릿수를 넘어가는 숫자들은 폐기 처리되며, 반대편에서 빈칸을 채우는 숫자는 0으로 채운다.
- 예를들어 0010 을 왼쪽으로 2번 시프팅 즉, << 2를 한다면
- 1000이 되며, 이를 왼쪽으로 1번 더 시프팅 즉, <<1를 추가로 한다면 0000이 된다.
GitHub source code
Left shift <<
3 = 0011
3 << 1 = 0110 = 6
3 << 2 = 1100 = 12
3 << 3 = 1000 = 8
- 왼쪽 연산자는 각 비트를 왼쪽으로 시프팅한다.
- 시프팅시, 만일 앞에 시프트된 숫자가 갈 자리가 없다면, 그 부분은 버려진다. 또한 뒤에서 새로 채워지는 부분은 앞에서 버려진 숫자가 가는 것이 아니라 무조건 0 으로 채워진다.
#include <iostream>
using namespace std;
int main() {
int a = 3;
cout<<"a is: "<<a<<endl;
int temp = a << 1;
cout<<"a << 1 is: "<<temp<<endl;
return 0;
}
~/De/D/C/P/Algorithms/A/ShiftOperator main ?1 ❯ g++ main.cpp -o main.out
~/De/D/C/P/Algorithms/A/ShiftOperator main ?1 ❯ ./main.out 22:50:59
a is: 3
a << 1 is: 6
- 정수형 변수 a에 3의 값을 초기화해 준 후, 왼쪽으로 한칸 시프팅한 결과를 출력했다.
- 참고로 이진법을 사용하기 때문에 시프팅되는 값이 폐기되지 않는다는 전제하에 한칸 시프팅 될 때 마다 값은 2배가 된다(왼쪽으로 이동하기 때문).
- 따라서 3을 왼쪽으로 한칸 시프팅했을 경우 위처럼 2배인 6이 출력됨.
Right shift >>
12 = 1100
12 >> 1 = 0110 = 6
12 >> 2 = 0011 = 3
12 >> 3 = 0001 = 1
- 오른쪽 연산자는 각 비트를 오른쪽으로 시프팅한다.
- 2진법을 사용하기 때문에 마찬가지로 시프팅되는 값이 폐기되지 않는다는 전제하에 한칸 시프팅 될 때 마다 값은 2분의 1이된다(오른쪽으로 이동하기 때문).
- 시프팅시, 만일 앞에 시프트된 숫자가 갈 자리가 없다면, 그 부분은 버려진다. 또한 뒤에서 새로 채워지는 부분은 앞에서 버려진 숫자가 가는 것이 아니라 무조건 0 으로 채워진다.
References