Java(10) - 비트 연산자
비트 단위로 연산을 진행하는 비트 연산자들을 공부하겠습니다.
1. 비트 연산자란
비트 연산자는 비트 단위로 연산을 진행하는 연산자이며, 피연산자는 반드시 정수여야 합니다.
(실수에 대한 비트 연산은 불가능합니다.)
비트 연산자의 종류로는
- & : 비트 단위로 AND 연산을 한다.
- | : 비트 단위로 OR 연산을 한다.
- ^ : 비트 단위로 XOR 연산을 한다.
- ~ : 피연산자의 모든 비트를 반전시켜서 얻은 결과를 반환한다.
비트 연산의 경우 동일한 위치에 있는 비트들끼리 연산을 진행합니다.
2. 비트 연산자 &, |, ^, ~
우선 &연산자에 대해 알아보겠습니다.
& 연산자는 비교의 대상이 되는 두 비트가 모두 1인 경우에만 1을 반환합니다.
| 연산자는 비교의 대상이 되는 두 비트중 하나가 1인 경우 1을 반환합니다.
^ 연산자는 비교의 대상이 되는 두 비트가 서로 다른 경우 1을 반환합니다. (0,1 1,0)
~ 연산자는 모든 비트를 반전시킵니다.
3. 비트 쉬프트(shift) 연산자(«, », »>)
비트 쉬프트 연산자는 피연산자의 비트 열을 왼쪽 또는 오른쪽으로 이동시키는 연산자입니다.
종류로는,
- << 연산자 : 피연산자의 비트 열을 왼쪽으로 이동, 이동에 따른 빈 공간은 0으로 채움
- >> 연산자 : 피연산자의 비트 열을 오른쪽으로 이동, 이동에 따른 빈 공간은 음수의 경우 1, 양수의 경우 0으로 채움
- >>> 연산자 : 피연산자의 비트 열을 오른쪽으로 이동, 이동에 따른 빈 공간을 0으로 채움
예시를 보겠습니다.
System.out.println(2<<1); //4
System.out.println(2<<2); //8
System.out.println(8>>1); //4
System.out.println(8>>2); //2
System.out.println(-8>>1); //-4
System.out.println(-8>>2); //-2
System.out.println(-8>>>3); //2147483644
쉽게 이해하려면 왼쪽으로의 비트열 이동은 2의 배수 곱으로 이루어집니다.
오른쪽으로의 비트열 이동은 2의 배수의 나눗셈으로 이루어집니다.
그러나 »>의 경우 이동의 따른 빈 공간을 무조건 0으로 채우기 때문에 2의 배수와는 전혀 상관없는 값이 만들어집니다.
댓글남기기