연산자란?
- 연산자는 연산을 수행하는 기호를 의미한다.
연산자와 피연산자
- 연산을 수행하려면 반드시 연산의 대상이 있어야 하는데 이를피연산자
라고 한다.
-연산자
: 연산을 수행하는 기호(+, -, &, / ...)
-피연산자
: 연산자의 작업 대상
->연산자
는피연산자
로 연산을 수행하면 항상결과값
을 반환한다.
2 + 3 -> 피연산자 ( 2, 3 )
연산자 ( + )
식(표현식, expression)
- 연산자와 피연산자를 조합하여 계산하고자 하는 바를 표현한 것을
식
또는표현식
이라고 한다.
종류 | 연산자 | 설명 |
---|---|---|
산술연산자 | +, -, *, /, %, <<, >> | 사칙연산과 나머지 연산 |
비교연산자 | <, >, <=, >=, ==(같다), !=(다르다) | 크고 작음과 같고 다름을 비교 |
논리연산자 | &&, ||, ! , &, ^, ~ | 그리고(AND)와 또는(OR)으로 조건을 연결 |
대입연산자 | = | 우변의 값을 좌변에 저장 |
기타연산자 | (type), ?: , instanceof | 형변환연산자, 삼항연산자, instanceof 연산자 |
😀 연산자의 우선순위와 결합규칙
- 식에 사용된 연산자가 둘 이상일 경우,
연산자의 우선순위에 의해서 연산순서가 결정된다.단항연산자
가이항연산자
보다 우선순위가 높다.- 만일, 우선순위가 확실하지 않다면, 먼저 계산되어야 하는 부분을
괄호로 묶어주면 된다
.- 연산자의 결합규칙은
왼쪽에서 오른쪽 순서
이지만,
대입연산자(=)
는오른쪽에서 왼쪽
으로 진행된다.
-> 정리
산술 > 비교 > 논리 > 대입
순서로 진행
단항(1) > 이항(2) > 삼항(3)
순서로 진행
- 피연산자의
타입이 일치
해야 연산이 가능하므로,
피연산자의 타입이 서로 다르면 연산 전에형변환 연산자
로
타입을 일치
시켜야 한다.- 대부분의 경우 두 피연산자의 타입 중
더 큰 타입으로 일치
시키는데,
작은 타입으로 형변환하면원래의 값이 손실될 가능성
이 있기 때문이다..작은 타입을 큰 타입으로 형변환
하는 경우 자동적으로 연산자생략 가능
10L + 10(int)
-> long + int -> long + long (더 큰 타입으로 계산)
⑴ 두 피연산자의 타입을 일치시킨다. ( 보다 큰 타입으로 일치)
long + int -> long + long
float + int -> float + float
double + float -> double + double
⑵ 피연산자의 타입이 int 보다 작은 타입이면 int로 변환한다.
정수형 : byte, short, int, long
byte + short -> int + int
char + short -> int + int
- 일반적인
덧셈( + )
,뺄셈( - )
,곱셈( * )
,
나눗셈( / )
,나머지( % )
을 수행- 사칙연산의 결과는 대입연산자를 통하여 다른 변수에 대입될 수 있다.
5 / 3 => 정수 / 정수 => 정수 => 1
5 % 3 => 5를 3으로 나눈 나머지 값 => 2
5 / 3.0 => 정수 / 실수 => 실수 / 실수 => 1.666666
모든 수는 0으로 나눌 수 없다. => 실행 시 에러발생
int num = 100;
int zero = 0;
int result = num / zero;
System.out.println(result); 실행 시 에러 발생
- 어떤 계산 결과를 다시
자기 자신에게 대입
하고자 하는 경우의 약식 표현이다.- 증감연산자는 피연산자에 저장된 값을
1증가 ( ++ )
, 또는1감소 ( -- )
시킨다.- 일반적으로 단항연산자는 피연산자의 왼쪽에 위치하지만,
증감연산자는 양쪽으로 모두 가능
하다.- 피연산자의
왼쪽에 위치하면 전위형(prefix)
,
피연산자의오른쪽에 위치하면 후위형(postfix)
라고 한다.
int num = 10;
++num;, num++; , --num;, num--;
단독으로 사용할 때는 왼쪽, 오른쪽 순서는 상관없지만,
그 외에는 왼쪽, 오른쪽에 따라 값이 달라진다.
int x = 100;
x = x + 5;
x += 5;
대입연산자
는 변수와 저장공간에 값 또는 수식의연산결과를 저장
하는데
사용한다.- 대입연산자의
왼쪽 피연산자를 lvalue(left value)
,오른쪽 피연산자를 rvalue(right value)
라고 한다.- 대입연산자의
rvalue
는변수 뿐만 아니라 식이나, 상수 모두 가능
한 반면,
lvalue
는 반드시변수처럼 변경할 수 있는 것
이어야 한다.
복합대입연산자 | 계산 결과 |
---|---|
+= | 더한 값을 저장 |
-= | 뺀 값을 저장 |
*= | 곱한 값을 저장 |
/= | 나눈 값을 저장 |
%= | 나눈 나머지를 저장 |
int source = 100; source += 100; // 200 source -= 50; // 150 source = *= 2; // 300 source /= 100; // 3 source %= 2; // 1
😘 전위형과 후위형의 값 차이
- 계산 식에서 ++가 왼쪽에 붙으면, 먼저 1 증가를 하고 계산을 한다.
++가 오른쪽에 붙으면, 계산을 먼저 한 후 1이 증가한다.int a1 = 100; int x1 = 1; int y1 = a1 + x1++; // 100 + 1 System.out,println(x1); // 2 => 먼저 계산 후 1 증가 System.out.println(y1); //101
int a2 = 100; int x2 = 1; int y2 = a2 + ++x2; // 100 + 2 System.out.println(x2); // 2 => 먼저 1 증가 후 계산 System.out,println(y2); // 102
비교연산자
는두 피연산자를 비교
하는데 사용되는 연산자이다.
주로조건문과 반복문의 조건식에 사용
되며, 연산결과는true, false
로
참인지 거짓인지만 판별 가능하므로,boolean값
으로 생성된다.- 비교연산자 역시 이항연산자이므로 비교하는 피연산자의 타입이
서로 다를 경우, 자료형의 볌위가 큰 쪽으로자동형변환
되어 비교한다.
비교연산자 | 연산결과 |
---|---|
> | 좌변값이 크면 true, 아니면 false |
< | 죄면값이 작으면 true, 아니면 false |
>= | 좌변값이 크거나 같으면 true, 아니면 false |
<= | 좌변값이 작거나 같으면 true, 아니면 false |
등가비교연산자 | 연산결과 |
---|---|
== | 두 값이 같으면 true, 아니면 false |
!= | 두 값이 다르면 true, 아니면 false |
- 두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자이다.
기본형
은 물론참조형
에도 사용할 수 있다.기본형
의 경우변수에 저장되어 있는 값이 같은지
를 알 수 있고,
참조형
의 경우 객체의 주소값을 저장하기 때문에
두 개의 피연산자가같은 객체를 가리키고 있는지
를 확인 할 수 있다.
- 논리연산자는 둘 이상의 조건을 '그리고(AND)나 또는(OR)'으로
연결하여 하나의 식으로 표현할 수 있다.
논리연산자 | ||
---|---|---|
|| | OR 결합 | 피연산자 중 어느 한 쪽만 true이면 true |
&& | AND 결합 | 피연산자 모두 true여야 true |
! | NOT | !true = false / !false = true |
-> 👍효율적인 연산을 하기 위해서는👍
*OR 연산 일 경우 : 참일 확률이 높은 피연산자를 왼쪽에 놓는게 좋다.
(왼쪽이 true일 경우, 오른쪽은 계산 자체를 안해도 된다)
*
AND 연산 일 경우 : 거짓일 확률이 높은 피연산자를 왼쪽에 놓는게 좋다.
(왼쪽이 false일 경우, 오른쪽은 계산 자체를 안해도 된다)
조건연산자(삼항연산자)
는조건식, 식1, 식2
모두 세 개의 피연산자를
필요로 하는 삼항연산자이며 조건연산자는 하나뿐이다.
조건식 ? 식1 : 식2
==> 조건식이true
라면,식1을 실행
/ 조건식이false
라면식2를 실행
더 큰 수 구하기 int num1 = 5; int num2 = 8; int max = (num1 > num2)? num1 : num2; System.out.println(max); => 8