[Java] Ch03_2. 연산자 종류(증감, 산술, 논리, ...)

토끼는 개발개발·2022년 1월 6일
0

Java

목록 보기
13/33
post-thumbnail

📌 Chapter03. 연산자(Operator)


✏️ 2. 연산자의 종류


2.1 증감 연산자

증감 연산자

  • 증감 연산자(++) : 피연산자의 값을 1 증가시킨다.
  • 감소 연산자(- -) : 피연산자의 값을 1 감소시킨다.
j = ++i; // 전위형 : 값이 참조되기 전에 증가시킨다. 
j = i++; // 후위형 : 값이 참조된 후에 증가시킨다.

✨ 예제 1

public class OperatorEx1 {

	public static void main(String[] args) {
		int i=5;
		i++; 		// i=i+1; 과 같은 의미이다. ++i;로 바꿔 써도 결과는 같다.
		System.out.println(i);
		
		i=5; // 결과 비교를 위해i를 5로 변경
		++i;
		System.out.println(i);
	}
}

✨ 예제 2

public class OperatorEx2 {

	public static void main(String[] args) {
		int i=5, j=0;
	
		j = i++;
		System.out.println("j=i++; 실행 후, i=" + i + ", j=" + j);
		
        
		i=5;
		j=0;
		
		j = ++i;
		System.out.println("j=++i; 실행 후, i=" + i + ", j=" + j);
       
	}
}

=> 전위형 'j=++i;'에서는 i의 값을 증가시킨 후에 읽어오므로 i의 값이 5에서 6으로 증가된 후에 이 값이 j에 저장되며, 후위형 'j=i++;'에서는 i값인 5를 먼저 읽어온 다음에 i를 증가시키므로 j에 5가 저장된다.



2.2 부호 연산자

부호 연산자는 '+','-'로 boolean형과 char형을 제외한 기본형에만 사용할 수 있다.


✨ 예제 3

public class OperatorEx4 {

	public static void main(String[] args) {
		int i = -10;
		System.out.println(i);
		
		i = -i;
		System.out.println(i);
	}
}


2.3 산술 연산자



▶ 사칙 연산자(+ - * /)

사칙 연산자는 더하기, 빼기, 곱하기, 나누기가 있으며 피연산자의 타입을 일치시켜야한다.

  • 피연산자가 int(4byte)보다 작은 타입일 경우, int로 변환 후 연산을 수행한다.

✨ 예제 4

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c); //오류 발생

=> 이 경우 오류가 발생한다. a와 b는 모두 int형보다 작은 byte형이기 때문에 연산자 '+'는 이 두 개의 피연산자들의 자료형을 int형으로 변환한 다음 연산을 수행한다. 그래서 'a+b'의 연산결과는 byte형이 아닌 int형(4byte)이기 때문에 byte c에 저장할 수 없어 오류가 발생하는 것이다.

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c); 

# 출력
30

이처럼 큰 자료형의 값을 자료형의 변수에 저장하려면 명시적으로 형변환 연산자를 사용해서 형변환해주어야 한다.


▶ 나머지 연산자 (%)

나머지 연산자는 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 결과로 반환하는 연산자이다.

  • 몫은 '/'이고, 나머지는 '%'이다.
  • 나머지 연산자는 나누는 수로 음수도 허용한다. 다만, 부호는 무시되므로 결과는 음수의 절대값으로 나눈 나머지와 같다.

✨ 예제 5

public class OperatorEx5 {

	public static void main(String[] args) {
		int x = 10;
		int y = 8;
		System.out.printf("%d", x%y);
	}
}


2.4 비교 연산자

비교 연산자는 두 피연산자를 비교하는 데 사용되는 연산자로, 연산결과는 오직 true와 false 둘 중 하나이다.

=> 피연산자1(좌측)을 기준으로 비교 연산이 참이면 true, 거짓이면 false를 반환한다.


✨ 예제 6

float f = 0.1f;
double d = 0.1;
System.out.printf("%b", d==f);

=> '10.0 == 10.0f'는 true인데 '0.1==0.1f'는 false인 이유가 뭘까?
10.0f는 오차없이 저장할 수 있는 값이라서 double로 형변환해도 그대로 10.0이 되지만, 0.1f는 저장할 때 2진수로 변환하는 과정에서 오차가 발생한다. double타입의 상수인 0.1도 저장되는 과정에서 오차가 발생하지만, float타입의 리터럴인 0.1f보다 적은 오차로 저장된다.


▶ 문자열 비교

문자열 비교는 비교 연산자 '==' 대신 equals()라는 메서드를 사용해야 한다. 비교 연산자는 두 문자열이 완전히 같은 것인지 비교할 뿐이므로, 문자열의 내용이 같은지 비교하기 위해서는 equals()를 사용하는 것이다. 비교하는 두 문자열이 같으면 true를, 다르면 false를 반환한다.


✨ 예제 7

String str = new String("abc");
boolean result = str.equals("abc");

# 출력
true


2.5 논리 연산자


▶ 논리 연산자 - &&, ||, !

|| (OR결합) : 피연산자 중 어느 한 쪽만 true이면 true
&& (AND결합) : 피연산자 양쪽 모두 true이어야 true


▶ 비트 연산자 & | ^ ~ << >>

| (OR연산자) : 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
& (AND연산자) : 피연산자 양쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^ (XOR연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.



2.6 조건 연산자 ?

조건식 ? 식1 : 식2

  • 유일한 삼항 연산자로 조건식의 평가결과에 따라 다른 결과를 반환한다.
  • 조건식의 평가결과가 true이면 식1, false이면 식2가 연산결과가 된다.

✨ 예제 8

result = (5 > 3) ? 5 : 3; // 조건식이 참이므로 식1인 5가 연산결과가 된다.

// 출력
5;


참고
자바의 정석(저자: 남궁성)


오늘의 한 줄

앞서 정리했던 연산자의 종류에 대해 보다 상세히 정리했다. 예제를 통해 연산자 사용법을 익히려고 노력했다. 증감연산자와 논리연산자가 익숙하지 않아 더 많은 연습이 필요해보인다.

다음에는 조건문과 반복문에 대해 공부해보겠다.

profile
하이 이것은 나의 깨지고 부서지는 기록들입니다

0개의 댓글