비트 연산자
비트 연산자는 데이터를 비트(bit) 단위로 연산하기 때문에 0과 1로 표현 가능한 정수 타입만 비트 연산을 할 수 있다.
비트 논리 연산자 (&, |, ^)
구분 | 연산식 | 결과 | 설명 | ||
AND (논리곱) |
1 | & | 1 | 1 | 두 비트 모두 1 일때 연산 결과 1 |
1 | 0 | 0 | |||
0 | 1 | 0 | |||
0 | 0 | 0 | |||
OR (논리합) |
1 | | | 1 | 1 | 두 비트 중 하나만 1일때 연산 결과 1 |
1 | 0 | 1 | |||
0 | 1 | 1 | |||
0 | 0 | 0 | |||
XOR (배타적 논리합) |
1 | ^ | 1 | 0 | 두 비트중 하나는 1이고 다른 하나가 0일 경우 연산결과 1 |
1 | 0 | 1 | |||
0 | 1 | 1 | |||
0 | 0 | 0 | |||
NOT (논리 부정) |
~ | 1 | 0 | 보수 | |
0 | 1 |
비트 이동 연산자 (<<, >>, >>>)
구분 | 연산식 | 설명 | ||
이동(쉬프트) | a | << | b | 정수 a의 각 비트를 b만큼 왼쪽으로 이동(빈자리는 0으로 채워진다.) |
a | >> | b | 정수 a의 각 비트를 b만큼 오른쪽으로 이동(빈자리는 정수 a의 최상위 부호 비트(MSB)와 같은 값으로 채워진다. | |
a | >>> | b | 정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 0으로 채워진다.) |
비트 연산자를 이용한 2진수 덧셈
public static void main(String[] args) {
System.out.println(addBinaryPlus("1101","1011"));
System.out.println(addBinaryNonPlus("1101","1011"));
}
//일반적인 덧셈연산
public static String addBinaryPlus(String a, String b) {
int aInt = Integer.parseInt(a, 2);
int bInt = Integer.parseInt(b, 2);
int sum = aInt + bInt;
return Integer.toBinaryString(sum);
//숫자가 커진다면 다음과 같이 사용합니다.
/*
BigInteger aInt = new BigInteger(a, 2);
BigInteger bInt = new BigInteger(b, 2);
BigInteger sum = aInt.add(bInt);
return sum.toString(2);
*/
}
//비트연산으로 덧셈 (최초 매개변수가 String 이라고 가정했을때)
public static String addBinaryNonPlus(String a, String b) {
int aInt = Integer.parseInt(a, 2);
int bInt = Integer.parseInt(b, 2);
return Integer.toBinaryString(addBin(aInt, bInt));
}
//재귀용 비트연산 함수
public static int addBin(int a, int b) {
if(b == 0) return a;
//1. 두 비트 XOR 연산 : 두 비트가 다르면 1, 같으면 0
//즉, 1+0, 0+1은 = 1이고 1+1, 0+0은 0이므로 두 비트의 올림수를 제외하고 덧셈을 할 수 있다.
int sum = a^b;
//2. AND 연산 : 두 비트가 모두 1이면 1 (==두 비트가 같을때)
//1 + 1 의 비트는 올림수가 되므로 왼쪽으로 1 시프트 연산 (<<)
int carry = (a&b) << 1;
return addBin(sum, carry);
}
}
reference by
'Language > JAVA' 카테고리의 다른 글
3주차 과제 : 논리 연산자 (0) | 2021.02.13 |
---|---|
3주차 과제 : 관계 연산자 (0) | 2021.02.13 |
3주차 과제 : 산술 연산자 (0) | 2021.02.13 |
2주차 과제 : 타입 추론, var (0) | 2021.02.13 |
2주차 과제 : 타입 변환, 캐스팅 그리고 타입 프로모션 (0) | 2021.02.13 |