expression1>>expression2 비트연산 공통 설명
>> 연산자는 expression1의 비트상에서 expression2에 지정한 비트 수만큼 오른쪽으로 이동시킨다.
expression1의 비트에서 왼쪽에 새로 추가되는 자리는 0으로 채운다(보이지는 않믐).
오른쪽으로 밀려난 자릿수의 숫자는 버린다.
양수에서는 간단하다.
예를 들어 아래 코드에서는 14(이진수 '1110')를 비트상에서 오른쪽으로 두 비트 옮기면
오른쪽 2비트는 잘려 없어지고 이진수로 '11', 이는 십진수 3으로 반환된다.
var mumb=14
mumb>>2
그러나 음수에서는 이해가 쉽지 않다.
예를 들어 아래 코드에서는 -14의 이진수 '-1110')를 비트상에서 오른쪽으로 두 비트 옮기면
이진수로 '-100', 이는 십진수 -4으로 반환된다.
이는 부호를 유지하며 단순히 비트 자리수만 이동하는 것('-11' 십진수(-3))이 아니다.
var mumb=-14
mumb>>2
이는 32비트 기준(232)의 비트연산에서 부호를 관리하기 위한 것이기도 하다.
numb | 32비트맵(232 기준)에서 같은 수치 | 연산식 | 결과 |
십진수 | 2진수 | 십진수 | 2진수 | 십진수 | 2진수 |
-14 | -1110 | 4294967282 | 11111111111111111111111111110010 | numb>>2 | -4 | -100 | -4 | -100 | 4294967292 | 11111111111111111111111111111100 | 이동을 위와 비교하라 | -3 | -11 | 4294967293 | 11111111111111111111111111111101 | 이 단순 비트 이동이 아니다. | -78 | -1001110 | 4294967218 | 11111111111111111111111110110010 | numb>>3 | -10 | -1010 | -10 | -1010 | 4294967286 | 11111111111111111111111111110110 | 이동을 위와 비교하라 | -9 | -1001 | 4294967287 | 11111111111111111111111111110111 | 이 단순 비트 이동이 아니다. |
32비트맵(232 기준)에서 비트자리가 오른쪽으로 이동 비트 칸씩 이동하고 빈 왼쪽칸에는 각각 '1'이 추가되었다.
|