03.자바의 연산자

Last updated - 2023년 03월 10일 Edit Source


해당 게시글은 Do it! 자바 프로그래밍 입문 교재를 정리한 내용입니다.


# Chapter 03 - 자바의 여러 가지 연산자


# Java 기본 연산자

# 항과 연산자


연산자설명예시
단항 연산자항이 한 개인 연산자++num
이항 연산자항이 두 개인 연산자num1 + num2;
삼항 연산자항이 세 개인 연산자( 5 > 3 ) ? 1 : 0;

추가로, /는 몫, %는 나머지 !

1
2
3
4
5
int num1 = 10;
int num2 = 4;
  
num1 / num2 = 2; // 몫
num1 % num2 = 2; // 나머지

# 논리 연산 주의점

  • AND(&&) 연산 : 둘다 true여야 결과가 true라서 앞에꺼 하나라도 false가 나오면 뒤에 문장을 실행 안하고 false로 확정짓고 넘어감

  • OR(||) 연산 : 둘 중 하나만 true여도 겨로가가 true라서 앞에꺼 하나라도 true가 나오면 뒤에꺼 실행 안하고 true로 확정짓고 넘어감

논리 곱, 논리 합 연산 시 두 항을 모두 실행하지 않더라도 결과 값을 알 수 있는 경우에, 나머지 항이 실행되지 않는 것을 단락 회로 평가(Short Circuit Evaluation; SCE)라고 한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package chapter03;

public class pr03_OperationEx3 {
	public static void main(String[] args) {
		int num1 = 10;
		int i = 2;
		  
		boolean value = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
		
		value = ((num1 = num1 + 10) > 10) || ((i = i + 2) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
	}
}

// false
// 20
// 2 논리 곱, 앞 항 거짓이라서 뒷 항 실행 안되고 i값 그대로
// true
// 30
// 2 논리 합, 앞 항 참이라서 뒷항 실행 안되고 i값 그대로

# 조건 연산자


연산자기능예시
조건식 ? 결과1 : 결과2조건식이 참이면 결과 1,
조건식이 거짓이면 결과2 선택
int num = (5 > 3) ? 10 : 20;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package chapter03;

public class pr04_OperationEx4 {
	public static void main(String[] args) {
		int num = 10;
		boolean isEven;
		isEven = (num % 2 == 0) ? true : false;
		System.out.println(isEven);
	}
}

// true

# Java 비트 연산자

# 비트 논리 연산자

  • & : AND 연산자
1
2
3
4
5
6
num1 : 0 0 0 0 0 1 0 1 // 5
& num2 : 0 0 0 0 1 0 1 0 // 10
------------------------
result : 0 0 0 0 0 0 0 0 // 0
  
// 5 & 10 = 0
  • | : OR 연산자
1
2
3
4
5
6
num1 : 0 0 0 0 0 1 0 1 // 5
| num2 : 0 0 0 0 1 0 1 0 // 10
------------------------
result : 0 0 0 0 1 1 1 1 // 15
  
// 5 | 10 = 15
  • ^ : XOR 연산자, 같으면 0, 다르면 1
1
2
3
4
5
6
num1 : 0 0 0 0 0 1 0 1 // 5
^ num2 : 0 0 0 0 1 0 1 0 // 10
------------------------
result : 0 0 0 0 1 1 1 1 // 15

// 5 ^ 10 = 15
  • ~ : 반전 연산자, 부호 비트가 1이면 음수인거 까먹지 말기
1
2
3
4
num : 0 0 0 0 0 1 0 1 // 10
------------------------
~ num : 1 1 1 1 1 0 1 0 // -11
// ~10 = -11

# 비트 이동 연산자

  • << : 좌측 시프트 연산자, 왼쪽으로 비트 이동, 뒷부분인 오른쪽에 0 채우기
1
2
num : 0 0 0 0 0 1 0 1 // 5
num << 2 : 0 0 0 1 0 1 0 0 // 20

왼쪽으로 n비트 이동한다는 것은 기존 값 * n2 이다.

따라서, 5 << 2는 5 * 22 = 20이다.


  • >> : 우측 시프트 연산자, 오른쪽으로 비트 이동, 앞부분인 왼쪽에 0 채우기, 추가로 기존 값의 부호비트와 동일
1
2
num : 0 0 0 0 1 0 1 0 // 10
num >> 2 : 0 0 0 0 0 0 1 0 // 2

왼쪽으로 n비트 이동한다는 것은 기존 값 / n2 이다.

따라서, 10 >> 2는 10 / 22 = 2이다.


  • >>> : 우측 시프트 연산자, 오른쪽으로 비트 이동, 앞부분인 왼쪽에 0 채우기, »와 다른점은 얘는 기존 값의 부호비트와 상관 없이 무조건 0이 채워짐

Comment