HwangHub
비트 비교연산자 짚고 넘어가기 본문
자바에는 다양한 연산자들이 있습니다. 그 중에서도 오늘은 비트 비교연산자에 대해 이야기해볼까 합니다. 비트연산자는 |
, &
, ^
, ~
, <<
, >>
, >>>
등이 있습니다. 이들은 각각 OR, AND, XOR, NOT, left shift, signed right shift, unsigned right shift 연산을 수행합니다. 이번 글에서는 이들 중에서도 |
와 &
연산자에 대해 좀 더 자세히 알아보겠습니다.
비트 OR 연산자 (|
)
비트 OR 연산자 (|
)는 두 비트 중 하나라도 1이 있으면 결과는 1이 됩니다. 이 연산자는 논리 OR 연산자 (||
)와 비슷해 보일 수 있지만, 중요한 차이가 있습니다. 논리 OR 연산자는 앞의 피연산자가 true
일 경우 뒤의 피연산자를 평가하지 않습니다. 이를 "short-circuit" 연산이라고 합니다. 그러나 비트 OR 연산자는 두 피연산자 모두를 평가합니다.
다음은 이를 보여주는 예제 코드입니다.
int a = 15;
int b = 10;
System.out.println((a += 5) > 15 | (b -= 5) < 10); // true
System.out.println(a + ", " + b); // 20, 5
위 코드에서 (a += 5) > 15
는 true
이므로, 논리 OR 연산자 (||
)를 사용했다면 (b -= 5) < 10
은 실행되지 않았을 것입니다. 하지만 비트 OR 연산자를 사용했기 때문에 (b -= 5) < 10
도 실행되고, b
의 값이 5로 감소하는 것을 확인할 수 있습니다.
비트 AND 연산자 (&
)
비트 AND 연산자 (&
)는 두 비트 모두 1일 때만 결과가 1이 됩니다. 이 역시 논리 AND 연산자 (&&
)와 비슷해 보일 수 있지만, 마찬가지로 중요한 차이가 있습니다. 논리 AND 연산자는 앞의 피연산자가 false
일 경우 뒤의 피연산자를 평가하지 않습니다. 하지만 비트 AND 연산자는 두 피연산자 모두를 평가합니다.
다음은 이를 보여주는 예제 코드입니다.
int a = 15;
int b = 10;
System.out.println((a > b) & (b > 0)); // true
한번쯤은 짚어야 했다.
비트 비교연산자는 각 비트를 직접 조작하는데 사용되며, 논리 연산자와는 다른 동작 방식을 가지고 있습니다. 특히, short-circuit 연산을 수행하지 않는다는 점을 기억해두는 것이 중요합니다. 사실 개발 과정에서 그다지 많이 사용하지는 않는 것 같습니다만, 그래도 분명히 알아둘 필요성은 있어 보여서 정리해 보았습니다.
'workspace > 아티클' 카테고리의 다른 글
자바의 형 변환 짚고 넘어가기 (0) | 2024.01.15 |
---|---|
조건문 짚고 넘어가기 (0) | 2024.01.15 |
자바 변수 톺아보기 (1) | 2024.01.15 |
자바 변수가 pass by reference를 사용한다고요? (0) | 2024.01.15 |
[HTML] 시맨틱 태그가 뭔가요? (0) | 2024.01.14 |