
자바 기본 문법 – 연산자 – 5 – 기타 연산자 (비트 연산자, 시프트 연산자 등)
안녕하세요! 자바의 기본 문법 중 연산자에 대해 이야기해보겠습니다. 이번에는 “기타 연산자”라 불리는 비트 연산자와 시프트 연산자에 대해 알아보도록 하겠습니다.
소제목 1: 비트 연산자
비트 연산자는 컴퓨터의 이진수(bit)를 다루는 연산을 수행합니다. 이 연산자들은 비트 단위로 값을 조작하고, 정수형 데이터의 각 비트를 조작하는 데에 주로 사용됩니다.
비트 AND 연산자 (&)
비트 AND 연산자는 두 개의 피연산자의 비트를 비교하여 둘 다 1인 경우에만 1을 반환합니다. 다음은 비트 AND 연산자의 예시입니다.
int a = 5; // 이진수: 0101
int b = 3; // 이진수: 0011
int result = a & b; // 이진수: 0001 (10진수로 1)
위의 예시에서, a와 b의 비트 AND 연산은 a와 b의 각 비트를 비교하여 둘 다 1인 경우에만 1을 반환합니다. 따라서 result
변수에는 1이 저장됩니다.
비트 OR 연산자 (|)
비트 OR 연산자는 두 개의 피연산자의 비트를 비교하여 적어도 하나의 비트가 1인 경우에 1을 반환합니다. 다음은 비트 OR 연산자의 예시입니다.
int a = 5; // 이진수: 0101
int b = 3; // 이진수: 0011
int result = a | b; // 이진수: 0111 (10진수로 7)
위의 예시에서, a와 b의 비트 OR 연산은 a와 b의 각 비트를 비교하여 적어도 하나의 비트가 1인 경우에 1을 반환합니다. 따라서 result
변수에는 7이 저장됩니다.
비트 XOR 연산자 (^)
비트 XOR 연산자는 두 개의 피연산자의 비트를 비교하여 서로 다른 비트일 경우에만 1을 반환합니다. 다음은 비트 XOR 연산자의 예시입니다.
int a = 5; // 이진수: 0101
int b = 3; // 이진수: 0011
int result = a ^ b; // 이진수: 0110 (10진수로 6)
위의 예시에서, a와 b의 비트 XOR 연산은 a와 b의 각 비트를 비교하여 서로 다른 비트일 경우에만 1을 반환합니다. 따라서 result
변수에는 6이 저장됩니다.
비트 NOT 연산자 (~)
비트 NOT 연산자는 단항 연산자로, 피연산자의 모든 비트를 반전시킵니다. 0은 1로, 1은 0으로 변환됩니다. 다음은 비트 NOT 연산자의 예시입니다.
int a = 5; // 이진수: 0101
int result = ~a; // 이진수: 1010 (10진수로 -6)
위의 예시에서, a의 비트 NOT 연산은 a의 모든 비트를 반전시킵니다. 따라서 result
변수에는 -6이 저장됩니다.
소제목 2: 시프트 연산자
시프트 연산자는 이진수로 표현된 값을 좌측 또는 우측으로 지정된 비트 수만큼 이동시킵니다. 이동된 빈 비트는 0으로 채워집니다.
왼쪽 시프트 연산자 (<<)
왼쪽 시프트 연산자는 피연산자의 비트를 왼쪽으로 이동시킵니다. 이동된 비트는 왼쪽에서 새로운 비트 0으로 채워집니다. 다음은 왼쪽 시프트 연산자의 예시입니다.
int a = 5; // 이진수: 0101
int result = a << 2; // 이진수: 010100 (10진수로 20)
위의 예시에서, a의 왼쪽 시프트 연산은 a의 비트를 왼쪽으로 2칸 이동시킵니다. 이동된 비트는 왼쪽에서 새로운 비트 0으로 채워집니다. 따라서 result
변수에는 20이 저장됩니다.
오른쪽 시프트 연산자 (>>)
오른쪽 시프트 연산자는 피연산자의 비트를 오른쪽으로 이동시킵니다. 이동된 비트는 부호 비트와 동일한 값으로 채워집니다. 양수인 경우에는 0으로, 음수인 경우에는 1로 채워집니다. 다음은 오른쪽 시프트 연산자의 예시입니다.
int a = 5; // 이진수: 0101
int result = a >> 2; // 이진수: 0001 (10진수로 1)
위의 예시에서, a의 오른쪽 시프트 연산은 a의 비트를 오른쪽으로 2칸 이동시킵니다. 이동된 비트는 부호 비트와 동일한 값으로 채워집니다. 따라서 result
변수에는 1이 저장됩니다.
부호 없는 오른쪽 시프트 연산자 (>>>)
부호 없는 오른쪽 시프트 연산자는 피연산자의 비트를 오른쪽으로 이동시킵니다. 이동된 비트는 항상 0으로 채워집니다. 다음은 부호 없는 오른쪽 시프트 연산자의 예시입니다.
int a = -10; // 이진수: 11111111111111111111111111110110 (음수)
int result = a >>> 2; // 이진수: 00111111111111111111111111111101 (10진수로 1073741821)
위의 예시에서, a의 부호 없는 오른쪽 시프트 연산은 a의 비트를 오른쪽으로 2칸 이동시킵니다. 이동된 비트는 항상 0으로 채워집니다. 따라서 result
변수에는 1073741821이 저장됩니다.
주의해야 할 점
- 비트 연산자와 시프트 연산자는 주로 저수준의 연산에 사용되며, 보다 복잡한 연산에는 적합하지 않을 수 있습니다.
- 비트 연산자와 시프트 연산자는 정수형 데이터에서 주로 사용되지만, 다른 데이터 타입에도 적용될 수 있습니다. 그러나 부동 소수점 숫자에는 적용되지 않습니다.
- 시프트 연산에서 너무 큰 값을 이동시키면 원하지 않는 결과가 발생할 수 있으므로 주의해야 합니다.
이상으로 비트 연산자와 시프트 연산자에 대해 알아보았습니다. 자바의 기타 연산자들은 특정 상황에서 유용하게 사용될 수 있으니, 적절한 문제에 적용하여 효과적인 프로그래밍을 해보시기 바랍니다. 더 많은 자바 기본 문법과 연산자에 대한 내용은 다음 포스팅에서 이어서 다루도록 하겠습니다.
감사합니다!