[C/C++] Shift 연산자
CS/C/C++ 2009. 9. 6. 01:062개의 shift 연산자
a << b : a를 b반큰 왼쪽으로 Shift 시킨다.
a >> b : a를 b만큼 오른쪽으로 Shift 시킨다.
왼쪽으로 이동시킬 때, 오른쪽에는 0이 채워진다.
오른쪽으로 이동 이동시킬 때, MSB에는 a의 부호 비트가 채워진다.
-6이 표현되는 비트는
1111 1111 1111 1111 1111 1111 1111 1010
이 된다.
-6 << 1 한다면, 이는
1111 1111 1111 1111 1111 1111 1111 0100
이 되고, 이는 -12 이다.
왼쪽으로 Shift 시에는 오른쪽에 무조건 0이 채워지기 때문에, 중간에 부호가 바뀌는 경우가 생길 수 있다.
-6 >> 1 한다면, 이는
1111 1111 1111 1111 1111 1111 1111 1101
이 되고, 이는 -3 이다.
음수의 표현을 2의 보수법으로 나타내기 때문에, MSB에 부호비트를 유지 함으로써, Shift시에도 올바른 값이 표현된다.
a << b : a를 b반큰 왼쪽으로 Shift 시킨다.
a >> b : a를 b만큼 오른쪽으로 Shift 시킨다.
왼쪽으로 이동시킬 때, 오른쪽에는 0이 채워진다.
오른쪽으로 이동 이동시킬 때, MSB에는 a의 부호 비트가 채워진다.
-6이 표현되는 비트는
1111 1111 1111 1111 1111 1111 1111 1010
이 된다.
-6 << 1 한다면, 이는
1111 1111 1111 1111 1111 1111 1111 0100
이 되고, 이는 -12 이다.
왼쪽으로 Shift 시에는 오른쪽에 무조건 0이 채워지기 때문에, 중간에 부호가 바뀌는 경우가 생길 수 있다.
-6 >> 1 한다면, 이는
1111 1111 1111 1111 1111 1111 1111 1101
이 되고, 이는 -3 이다.
음수의 표현을 2의 보수법으로 나타내기 때문에, MSB에 부호비트를 유지 함으로써, Shift시에도 올바른 값이 표현된다.