Chapter 3 연산자

Jun-hee Cho·2023년 3월 23일
0

Java

목록 보기
4/13

1. 연산자(operator)

연산자는 '연산을 수행하는 기호'를 말한다.

1.1 연산자와 피연산자

연산자(operator): 연산을 수행하는 기호(+, -, *, / 등)
피연산자(operand): 연산자의 작업 대상(변수, 상수, 리터럴, 수식)


연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다.

1.2 식(式)과 대입연산자

연산자와 피연산자를 조합하여 계산하고자하는 바를 표현한 것을 '식(式, expression)'이라고 한다. 그리고 식을 계싼하여 결과를 얻는 것을 '식을 평가(evaluation)한다'고 한다. 하나의 식을 평가(계산)하면, 단 하나의 결과를 얻는다. 만일 x의 값이 5라면, 아래의 식을 평가한 결과는 23이 된다.

4 * x + 3

작성한 식을 프로그램에 포함시키려면, 식의 끝에 ';'를 붙여서 하나의 문장으로 만들어야 한다.

4 * x + 3; // 문장(statement)

예를 들어 변수 x의 값이 5일 때, 위의 문장은 다음과 같은 과정으로 처리된다.

4 * x + 3;
->4 * 5 + 3;
->23; // 결과를 얻었지만 쓰이지 않고 사라진다.

식이 평가되어 23이라는 결과를 얻었지만, 이 값이 어디에도 쓰이지 않고 사라지기 때문에 이 문장은 아무런 의미가 없다. 그래서 아래와 같이 대입 연산자 '='를 사용해서 변수와 같이 값을 저장할 수 있는 공간에 결과를 저장해야한다.

y = 4 * x + 3;
->y = 4 * x + 3;
->y = 23; // 식의 평가결과가 변수 y에 저장된다.

그 다음에는 변수 y에 저장된 값을 다른 곳에 사용하거나 화면에 출력함으로써 의미있는 결과를 얻을 수 있다.

y = 4 * x + 3;
System.out.println(y); // 변수 y의 값을 화면에 출력

만일 식의 평가결과를 출력하기만 원할 뿐, 이 값을 다른 곳에 사용하지 않을 것이라면 다음과 같이 변수에 저장하지 않고 println메서드의 괄호() 안에 직접 식을 써도 된다.

System.out.println(4 * x + 3);
->System.out.println(23); // 23이 화면에 출력된다.

1.3 연산자의 종류


피연산자의 개수에 의한 분류

1.4 연산자의 우선순위와 결합규칙

  1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
  2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항연산자보다 높다.
  3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

1.5 산술 변환(usual arithmetic conversion)

이항 연산자는 두 피연산자의 타입이 일치해야 연산이 가능하므로, 피연산자의 타입이 서로 다르다면 연산 전에 형변환 연산자로 타입을 일치시켜야한다.

int i = 10;
float f = 20.0f;

float result = f + (float) i; // 형변환으로 두 피연산자의 타입을 일치

대부분의 경우, 두 피연산자의 타입 중에서 더 큰 타입으로 일치시키는데, 그 이유는 작은 타입으로 형변환하면 원래의 값이 손실될 가능성이 있기 때문이다. 앞서 배운 것과 같이 작은 타입에서 큰 타입으로 형변환하는 경우, 자동적으로 형변환되므로 형변환 연산자를 생략할 수 있다.

float result = f + i; // 큰 타입으로 형변환시, 형변환연산자 생략가능

'산술 변환'의 규칙은 다음과 같다.

① 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)
long + int -> long + long -> long
float + int -> float + float -> float
double + float -> double + double -> double

② 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
byte + short -> int + int -> int
char + short -> int + int -> int

int / int -> int
5 / 2 -> 2

2. 단항 연산자

2.1 증감 연산자 - ++, --

증가 연산자(++): 피연산자의 값을 1 증가시킨다.
감소 연산자(--): 피연산자의 값을 1 감소시킨다.

타입설명사용예
전위형값이 참조되기 전에 증가시킨다.j = ++i;
후위형값이 참조된 후에 증가시킨다.j = i++;
++i; // i의 값을 1 증가시킨다.
i++; // 위의 문장과 차이가 없다.

2.2 부호 연산자 - +, -

부호연산자(+, -): '+'는 피연산자에 1을 곱하고, '-'는 피연산자에 -1을 곱한다

3. 산술 연산자(생략)

4. 비교 연산자

4.1 대소비교 연산자 - <, >, <=, >=

비교연산자연산결과
>좌변 값이 크면, true 아니면 false
<좌변 값이 작으면, true 아니면 false
>=좌변 값이 크거나 같으면, true 아니면 false
<=좌변 값이 작거나 같으면, true 아니면 false

4.2 등가비교 연산자 - ==, !=

비교연산자연산결과
==두 값이 같으면, true 아니면 false
!=두 값이 다르면, true 아니면 false

5. 논리 연산자

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

||(OR결합): 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다.
&&(AND결합): 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.

5.2 비트 연산자 - &, |, ^, ~, <<, >>

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


6. 그 외의 연산자

6.1 조건 연산자 - ? :

result = (x > y) ? x : y;

6.2 대입 연산자 - = op=

System.out.println(x = 3); // 변수 x에 3이 저장되고
->System.out.println(3); // 연산 결과인 3이 출력된다.


lvalue와 rvalue

int i = 0
3 = i + 3; // 에러. lvalue가 값을 저장할 수 있는 공간이 아니다.
i + 3 = i // 에러. lvalue의 연산결과는 리터럴(i + 3 -> 0 + 3 -> 3)

final int MAX = 3; // 변수 앞에 키워드 final를 붙이면 상수가 된다.
MAX = 10; // 에러. 상수(MAX)에 새로운 값을 저장할 수 없다.

복합 대입 연산자
오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다. 단, 왼쪽 피연산자는 상수가 아니어야 한다.

profile
최고가 되기 위해 최선을...

0개의 댓글