● 연산자의 우선순위
- 최우선 연산자
- 단항 연산자
- 산술 연산자
- 쉬프트 연산자
- 관계 연산자
- 논리 연산자
- 삼항 연산자
- 대입 연산자
● 비트 연산
1. 논리 연산자
- & (AND, 논리곱) : A & B, 두 비트 모두 1이면 1
- | (OR, 논리합) : A | B, 두 비트 중 하나라도 1이면 1
- ^ (XOR, 배타논리합) : A ^ B, 두 비트가 서로 다르면 1
2. 단항 연산자
- ~ (NOT, 논리부정) : ~A, 0을 1로, 1을 0으로 변경, ~a = -a - 1
※ 부호비트
- 비트의 최상위 비트를 부호비트로 사용하고, 0은 양수, 1은 음수를 의미한다.
3. 쉬프트 연산자
- << (LEFT SHIFT, 좌쉬프트) : A << B, A를 B만큼 좌로 이동
- >> (RIGHT SHIFT, 우쉬프트) : A >> B, A를 B만큼 우로 이동
※ 비트가 넘어가면 잘리고, 빈 칸은 0으로 채워진다.(음수는 1로 채워진다.)
실습(연산자)
1. 논리 연산자
public class BitOper {
public static void main(String[] args) {
System.out.println(10 & 11);
System.out.println(10 | 11);
System.out.println(10 ^ 11);
}
}

2. 단항 연산자
public class BitOper {
public static void main(String[] args) {
System.out.println(~10); // (-10) - 1
}
}

3. 쉬프트 연산자
public class BitOper {
public static void main(String[] args) {
System.out.println(10 << 1); // 1010 << 1 : 0001 0100(20)
System.out.println(10 >> 1); // 1010 >> 1 : 0101(5)
}
}

실습(CodeUp)
1. 1047
문제 설명
정수 1개를 입력받아 2배 곱해 출력해보자.
입력
정수 한 개가 입력된다.
단, -1073741824 ~ +1073741823
출력
2배 곱한 정수를 출력한다.
내 풀이
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.println(a << 1);
}
}
제곱은 정수를 2배로 곱하거나 나누어 계산해 주는 비트단위시프트연산자 <<, >>를 이용한다.
'ETC > 복습' 카테고리의 다른 글
[복습_JAVA] 07 (0) | 2022.08.12 |
---|---|
[복습_JAVA] 06 (0) | 2022.08.10 |
[복습_JAVA] 04 (0) | 2022.08.07 |
[복습_JAVA] 03 (0) | 2022.08.06 |
[복습_JAVA] 02 (0) | 2022.08.04 |