반응형
정의
자바에서 >>와 >>>는 비트 시프트 연산자로, 정수 값을 오른쪽으로 비트 단위로 이동시킵니다.
차이점
- >> (부호 있는 오른쪽 시프트):
- 부호를 유지하면서 오른쪽으로 비트를 이동시킵니다.
- 양수인 경우, 왼쪽에 0으로 채워지고 음수인 경우, 왼쪽에 1로 채워집니다.
- 시프트 연산으로 인해 새로 생기는 비트는 제거됩니다.
- >>> (부호 없는 오른쪽 시프트):
- 부호 비트를 무시하고 오른쪽으로 비트를 이동시킵니다.
- 양수와 음수 모두 왼쪽에 0으로 채워집니다.
- 시프트 연산으로 인해 새로 생기는 비트는 제거됩니다.
예제
int x = 10; // 10은 이진수로 1010입니다.
int y = -10; // -10은 이진수로 11111111111111111111111111110110입니다.
int result1 = x >> 1; // 10을 오른쪽으로 1 비트 시프트합니다.
int result2 = y >> 1; // -10을 오른쪽으로 1 비트 시프트합니다.
int result3 = x >>> 1; // 10을 오른쪽으로 1 비트 시프트합니다.
int result4 = y >>> 1; // -10을 오른쪽으로 1 비트 시프트합니다.
위의 코드에서
- result1는 x >> 1의 결과를 나타냅니다. 5가 됩니다. (1010을 오른쪽으로 1 비트 시프트하면 0101이 됩니다.)
- result2는 y >> 1의 결과를 나타냅니다. 5가 됩니다. (11111111111111111111111111110110을 오른쪽으로 1 비트 시프트하면 11111111111111111111111111111011이 됩니다.)
- result3는 x >>> 1의 결과를 나타냅니다. 5가 됩니다. (1010을 오른쪽으로 1 비트 시프트하면 0101이 됩니다.)
- result4는 y >>> 1의 결과를 나타냅니다. 2147483643이 됩니다. (11111111111111111111111111110110을 오른쪽으로 1 비트 시프트하면 01111111111111111111111111111011이 되고, 이는 10진수로 2147483643입니다.)
결론
>>는 부호를 유지하면서 비트를 오른쪽으로 시프트하는 반면, >>>는 양수와 음수 모두 왼쪽에 0을 채워서 시프트합니다. 따라서 어떤 시프트 연산을 사용해야 할지는 사용하는 데이터의 의도에 따라 달라집니다.
반응형
'old > Programming' 카테고리의 다른 글
backtracking 알고리즘이란? (0) | 2023.07.02 |
---|---|
부분문자열과 순열, 그리고 조합의 차이점, 경우의 수란? (0) | 2023.07.02 |
SQL Operator Precedence Table (0) | 2023.06.22 |
무료 자바 설치 하는 법 (0) | 2023.06.22 |
아나콘다, 파이참 가상환경 설정하기: 단계별 가이드 (0) | 2023.06.20 |