2016년 11월 22일 화요일

bit shift

문제
bit shift의 종류에 대해서 알아보기.

해결
left shift (<<)
6 << 1
왼쪽으로 1bit를 옮김.
6 = 1*2^2 + 1*2^1 에서 1bit를 옮기면
1*2^3 + 1*2^2 = 12가 됨.
즉 <<1은 x2가 됨.
마찬가지로 <<2는 x2x2 = x4가 됨.
단, buffer를 초과하지 않는 한도에서.
non-circular shift이므로, 좌측 끝까지 가버린 bit는 사라짐.

right shift (>> or >>>)
위 left shift와 반대.
역시 우측 끝 lost bit는 사라짐.
>>: arithmetic right shift, 좌측 끝(sign)을 보존함.
>>>: logical right shift, 좌측 끝을 0으로만 채움(부호를 보존하지 않음), Java에만 존재함, c/c++에는 없음.

만약 circular shift를 만들고 싶다면, http://stackoverflow.com/questions/776508/best-practices-for-circular-shift-rotate-operations-in-c
를 볼 것.

<참조: http://stackoverflow.com/questions/141525/what-are-bitwise-shift-bit-shift-operators-and-how-do-they-work>