728x90
2진수와 나머지 연산의 관계
이진수에서 숫자는 2의 거듭제곱으로 표현됩니다. 예를 들어, 10진수 5는 이진수로 101입니다. 5의 각 자리는 2^2, 2^1, 2^0로 대응됩니다.
- 2^2 (4의 자리)는 1
- 2^1 (2의 자리)는 0
- 2^0 (1의 자리)는 1
이때, 마지막 비트(1의 자리, 즉 2^0)가 홀수인지 짝수인지에 따라 값이 달라집니다.
public class BitwiseExample {
public static void main(String[] args) {
int x1 = 5; // 이진수: 101
int x2 = 4; // 이진수: 100
// 나머지 연산을 통한 마지막 비트 확인
System.out.println("5 % 2 == " + (x1 % 2)); // 1 (홀수)
System.out.println("4 % 2 == " + (x2 % 2)); // 0 (짝수)
// 비트 연산을 통한 마지막 비트 확인
System.out.println("5 & 1 == " + (x1 & 1)); // 1 (홀수)
System.out.println("4 & 1 == " + (x2 & 1)); // 0 (짝수)
}
}
위 코드와 같이 비트연산으로도 마지막 비트를 확인할 수 있습니다.
마지막 비트를 확인하려면 % 2 나머지 연산이 가독성이 뛰어나므로 대부분의 상황에서 적합합니다. 이때 나머지 연산 % 2를 사용하면 마지막 비트가 1인지 0인지 쉽게 알 수 있습니다.
하지만 성능이 중요한 경우라면 비트 연산 & 1을 사용하는 것이 더 좋습니다.
왜 마지막 비트는 나머지 연산으로 확인할 수 있는가?
- 마지막 비트는 2^0 자리입니다.
- 이 자리의 값이 1이면 숫자는 홀수, 0이면 숫자는 짝수입니다.
- X % 2는 X를 2로 나누었을 때의 나머지 값입니다.
- 이 나머지가 1이면 마지막 비트는 1, 0이면 마지막 비트는 0입니다.
- 즉, 마지막 비트만 확인하고 싶다면, 나머지 연산으로 충분히 구할 수 있습니다.
예시
- X = 5 (이진수: 101)
- X % 2 == 1 → 마지막 비트는 1 (5는 홀수)
- X = 4 (이진수: 100)
- X % 2 == 0 → 마지막 비트는 0 (4는 짝수)
그 이상의 비트는 비트 연산을 사용해야 하는 이유
나머지 연산 % 2는 2로 나누는 연산이기 때문에, 0번째 비트(가장 오른쪽 비트)만 확인할 수 있습니다. 만약 1번째 비트(2의 자리) 이상의 비트를 확인하려면, 비트 연산을 사용해야 합니다.
1. 왼쪽 시프트 연산 (<<)
- 1 << n은 1을 n번째 비트만큼 왼쪽으로 이동시키는 연산입니다.
- 예를 들어, 1 << 3은 1000(이진수)로, 3번째 비트가 1인 값을 의미합니다.
2. 비트 AND 연산 (&)
- 특정 비트가 1인지 0인지를 확인하려면 AND 연산을 사용하여 마스크를 만들고, 이를 원본 값과 결합합니다.
- 예를 들어, X & (1 << 2)는 X의 2번째 비트(4의 자리)가 1인지 확인하는 연산입니다.
결론적으로 0번째 비트(가장 오른쪽 비트)는 나머지 연산 % 2를 사용하여 간단히 확인할 수 있습니다.1번째 비트 이상을 확인하려면 비트 연산인 1 << n과 & 연산을 사용해야 합니다. 이를 통해 원하는 비트만을 정확하게 확인할 수 있습니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.11.26 - Udemy 동영상이 안보일 때 해결방법 (0) | 2024.11.26 |
---|---|
[TIL, 일일 회고] 2024.11.25 - Interactive vs Non-Interactive Shell 알아보기 (0) | 2024.11.25 |
[TIL, 일일 회고] 2024.11.21 - 코딩 관련 기초 지식 (1부터 N까지의 합 공식 : 시그마 ∑) (0) | 2024.11.21 |
[TIL, 일일 회고] 2024.11.20 - 비트마스크를 이용한 백준-집합 문제 풀이 (1) | 2024.11.20 |
[TIL, 일일 회고] 2024.11.18 - 박싱(Boxing)과 언박싱(UnBoxing) (2) | 2024.11.18 |