자바(Java) 프로그래밍, 연산자 이야기 Part. 2 비트 연산자
- 개발 스터디/Java
- 2024. 4. 7.
비트 연산자
1. 비트 논리 연산자
1-1. & 연산자
int num1 = 5;
int num2 = 10;
int result = num1 & num2;
위 코드를 보자 변수 num1은 5, 변수 num2는 10으로 선언 되었다.
& 연산 결과인 result를 출력하면 무엇이 출력 될까? 15? 아니다 0이다.
컴퓨터 내부에서 5와 10을 2진수로 표현해보자.
5 = 00000101 10 = 00001010 |
5를 2진수로 표현하면 '00000101' 이고
10을 2진수로 표현하면 '00001010'이다.
& 연산은 각 자리에 해당하는 비트 값이 1인 경우에 1, 다르면 0이다.
따라서 5와 10을 2진수로 표현하고 각 자리가 1,0 또는 0,0 이기 때문에
출력값은 0이 출력 되는 것이다
1-2. | 연산자
int num1 = 5;
int num2 = 10;
int result = num1 | num2;
| 연산자는 둘 중 하나라도 1이면 1 둘다 0이면 0이 된다.
따라서 5와 10은 | 연산 하면 결과는 '00001111'이 나오게 되고
10진수로 변환 하면 15가 출력 된다.
1-3. ^ 연산자
int num1 = 5;
int num2 = 10;
int result = num1 ^ num2;
^ 연산은 각 자리에 해당하는 값이 같으면 0, 다르면 1이 된다.
따라서 5와 10을 ^연산 하면 결과는 '00001111'이 나오고
10진수로 변환하면 15가 나오게 된다.
1-4. ~ 연산자
int num1 = 10;
int result = ~num1;
~ 연산자는 값을 2진수로 변환하였을 때
각 자리의 값이 0이면 1로 바꾸고, 1이면 0으로 바꾼다
10을 2진수로 바꾸면 '00001010'이고
~연산을 처리하면 '11110101'이 된다.
이 값을 10진수로 변환하면 11이 된다.
그런데 위의 경우 부호 비트가 1이기 때문에 음수인 -11이 된다.
2. 비트 이동 연산자
비트 이동 연산자는 <<, >>, >>> 이렇게 세 가지가 있다.
이를 시프트(shift) 연산자라고 부르기도 한다.
2-1. << 연산자
int num = 5;
num << 2;
위 의 코드를 보자. 정수 5를 num 변수에 대입하고
'num << 2' num 값의 비트를 두 칸씩 왼쪽으로 이동해줘!
라고 코드를 입력하였다
5를 2진수로 바꾸면 '00000101'이고
두 번째 코드가 실행 되면 '00010100'이 된다.
왼쪽으로 n비트 이동한다는 것은 기존 값에 2의 n승 만큼 곱한다는 뜻이다.
따라서 5* 2의 2승 즉, 5*4가 되어 20이라는 값이 출력 되게 된다.
2-2. >> 연산자
int num = 10;
num >> 2;
위 의 코드를 보자. 정수 10를 num 변수에 대입하고
'num >> 2' num 값의 비트를 두 칸씩 오른쪽으로 이동해줘!
라고 코드를 입력하였다
10를 2진수로 바꾸면 '00001010'이고
두 번째 코드가 실행 되면 '00000010'이 된다.
오른쪽으로 n비트 이동한다는 것은 기존 값에 2의 n승 만큼 나눈다는 뜻이다.
따라서 10/2의 2승 즉, 10/4로 해석이되고 결과 값은 2가 된다.
2-3. >>> 연산자
>>> 시프트 연산자는 >> 연산과 동일하게 비트를 오른쪽으로 이동시킨다.
차이점이 있다면 >>> 연산자는 왼쪽에 채워지는 비트 값이
부호비트와 상관 없이 무조건 0이 된다.
package operator;
public class OperatorEx5 {
public static void main(String[] args) {
int num = 0B00000101;
System.out.println(num);
System.out.println(num << 2);
System.out.println(num >> 2);
System.out.println(num >>> 2);
num = num << 2;
System.out.println(num);
}
}
num만 출력하면 5가 나오고
num << 2의 출력은 20.
num >> 2의 출력은 1.
num >>> 2의 출력도 역시 1이 출력 된다.
3. 연산자의 우선 순위
- 단항 연산자가 가장 높고 이항, 삼항 연산자 순서다.
- 대입 연산자의 우선 순위가 가장 낮다
- 산술, 관계, 논리, 대입 연산자 순서로 우선순위를 가지며 ()의 우선순위가 가장 높다.
'개발 스터디 > Java' 카테고리의 다른 글
자바(Java) 프로그래밍 조건문 - switch case문 (0) | 2024.04.07 |
---|---|
자바(Java) 프로그래밍, 조건문, if문, if else문, if else if문 (1) | 2024.04.07 |
자바(Java) 프로그래밍, 연산자 이야기 Part. 1 기본 연산자 (0) | 2024.04.07 |
자바 프로그래밍, 형 변환 이야기 (0) | 2024.04.07 |
자바 JAVA 상수와 리터럴 feat. 변수 선언 (0) | 2024.04.06 |