비트 논리 연산자
비트 논리 연산자(비트 연산자)에는 비트 부정(NOT), 비트 곱(AND), 비트 합(OR) 그리고 비트 배타적 논리 합(XOR)이 있습니다. 비트 논리 연산자는 피연산자가 정수 타입(byte, short, int, long)인 경우 사용 할 수 있습니다.
구분 | 연산자 | 항의 개수 | 연산식 결과 |
비트 논리 | ~ | 단항 | 비트 부정(NOT), 비트 값(0 또는 1)을 상호 반전 |
비트 논리 | & | 이항 | 비트 곱(AND), 두 피연산자의 각 비트 자릿수 별로 모두 1인 경우 1, 그렇지 않은 경우 0 |
비트 논리 | | | 이항 | 비트 합(OR), 두 피연산자의 각 비트 자릿수 별로 하나라도 1인 경우 1, 모두 0인 경우 0 |
비트 논리 | ^ | 이항 | 비트 배타적 논리 합(XOR), 두 피연산자의 각 비트 자릿수 별로 서로 다르면 1, 같으면 0 |
비트 부정(NOT)
비트 부정 연산자 또는 비트 반전 연산자라고 부릅니다. 단항 연산자에 속하며, 전위 연산자이기 때문에 피연산자의 왼쪽에 위치합니다. 피연산자를 2진수로 표현했을 때 비트 값(0 또는 1)을 상호 반전합니다. 최상위 비트를 포함하여 모든 비트가 반전된 값을 반환하기 때문에 부호가 반대인 값이 산출됩니다.
연산자 | 산출 전 비트 | 산출 후 비트 | ||||||||||||||
~ | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
표에서 2진수 0000 1111은 10진수로 정수 15를 뜻합니다. 자바에서 2진수 String 타입을 10진수 int 타입으로, 또는 그 반대 방향으로 변환하기 위해서 Integer 래퍼 클래스의 함수를 사용합니다.
- parseInt(String s, int radix)
2진수 String 타입을 10진수 int 타입으로 변환합니다. - toBinaryString(int i)
10진수 int 타입을 2진수 String 타입으로 변환합니다.
2진수 1111 0000은 10진수 15를 구성하며, 비트 부정(반전) 연산자를 처리하면 산출 결과가 10진수 정수 -16이 됩니다. 최상위 비트가 반전되었기 때문에 부호가 반대인 값이 산출된 것을 확인 할 수 있습니다.
int i = Integer.parseInt("00001111", 2);
System.out.println(Integer.toBinaryString(i)); // 0000 1111
System.out.println(Integer.toBinaryString(~i)); // 1111 0000
비트 곱(AND)
두 피연산자의 각 비트 자릿수 별로 모두 1인 경우 1, 그렇지 않은 경우 0을 반환합니다.
연산자 | 산출 전 비트 | |||||||
& |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
산출 후 비트 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
다음은 표에서 두 피연산자의 비트 곱 연산 결과를 보여줍니다.
int a = Integer.parseInt("00001111", 2);
int b = Integer.parseInt("11001100", 2);
System.out.println(Integer.toBinaryString(a & b)); // 0000 1100
비트 합(OR)
두 피연산자의 각 비트 자릿수 별로 하나라도 1인 경우 1, 모두 0인 경우 0을 반환합니다.
연산자 | 산출 전 비트 | |||||||
| | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
산출 후 비트 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 |
다음은 표에서 두 피연산자의 비트 합 연산 결과를 보여줍니다.
int a = Integer.parseInt("00001111", 2);
int b = Integer.parseInt("11001100", 2);
System.out.println(Integer.toBinaryString(a | b)); // 1100 1111
비트 배타적 논리 합(XOR)
두 피연산자의 각 비트 자릿수 별로 서로 다르면 1, 같으면 0을 반환합니다.
연산자 | 산출 전 비트 | |||||||
^ | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
산출 후 비트 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
다음은 표에서 두 피연산자의 비트 배타적 논리 합 연산 결과를 보여줍니다.
int a = Integer.parseInt("00001111", 2);
int b = Integer.parseInt("11001100", 2);
System.out.println(Integer.toBinaryString(a ^ b)); // 1100 0011
'Java > Java SE, EE' 카테고리의 다른 글
[Java/Java SE, EE] 비트 마스크(Bitmask) (0) | 2022.01.16 |
---|---|
[Java/Java SE, EE] 비트 시프트 연산자 (0) | 2022.01.16 |
[Java/Java SE, EE] 논리 연산자 (0) | 2022.01.11 |
[Java/Java SE, EE] 부호(+, -) 연산자 (0) | 2022.01.10 |
[Java/Java SE, EE] 증감(++, --) 연산자 (0) | 2022.01.10 |