연산자(operator)
1. 연산자와 피연산자
- 연산자(operator) : 연산을 수행하는 기호 (+,-,*,/ 등)
- 피연산자(operand) : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)
- 연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다.
2. 식(式)과 대입연산자
- 식(式) : 연산자와 피연산자를 조합하여 계산하고자하는 바를 표현하는 것.
- 식을 평가(evalution)한다 : 식을 계산하여 결과를 얻는 것.
3. 연산자의 종류
- 종류 연산자 설명
산술 연산자 | + - * / % << >> | 사칙 연산(+-*/)과 나머지 연산(%) |
비교 연산자 | >, <, < =, > =, ==, ! = | 작음과 같고 다름을 비교 |
논리 연산자 | && | |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기타 | (type) ? : instaneof | 형변환 연산자, 삼항 연산자, instanceof 연산자 |
4. 연산자의 우선순위와 결합규칙
- 식에 사용된 연산자가 둘 이상인 경우, 연산자의 우선순위에 의해서 연산순서가 결정된다.
- 단항 연산자가 이항 연산자보다 우선순위가 높다
- 곱셈과 나눗셈이 덧셈과 뻴셈보다 우선순위가 높다
- 비교 연산자(>)보다 산술 연산자(+-)가 먼저 수행된다.
- 논리 연산자(&&)보다 비교 연산자가 먼저 수행된다.
- 대입 연산자는 연산자 중에서 제일 우선순위가 낮다.
- 쉬프트 연산자(<<)는 덧셈 연산자보다 우선순위가 낮다.
- 비트 연산자(&)는 비교 연산자(==)보다 우선순위가 낮다.
- 논리 연산자 중에서 AND를 의미하는 ‘&’와 ‘&&’가 OR를 의미하는 ‘|’와 ‘||’보다 우선순위가 높다.
- 수식에 AND와 OR가 함께 사용되는 경우는 괄호를 사용해서 우선순위를 명확히 하는 것이 좋다.
- 연산자의 결합규칙
- 연산자마다 다르지만 대부분 왼쪽에서 오른쪽의 순서로 연산을 수행하고, 단항 연산자와 대입 연산자(=)와 그 반대로, 오른쪽에서 왼쪽의 순서로, 연산을 수행한다.
- 산술 > 비교 > 논리 > 대입, 대입은 제일 마지막에 수행된다.
- 단항(1) > 이항(2) > 삼항(3). 단항 연산자와 우선순위가 이항 연산자보다 높다.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향을 왼쪽에서 오른쪽이다.
5. 산술 변환(usual arithmetic conversion)
- 이항 연산자는 두 피연산자의 타입이 일치해야 연산이 가능하므로, 피연산자의 타입이 서로 다르면 연산 전에 형변환 연산자로 타입을 일치시켜야 한다.
- 대부분의 경우, 작은 타입으로 형변환하면 원래의 값을 손실될 가능성이 있기 때문에 두 피연사의 타입 중에서 더 큰 타입으로 일치시킨다.
- 작은 타입 → 큰 타입 : 자동 형변환, 형변환 연산자를 생략할 수 있다.
- 규칙
- 두 연산자의 타입을 같게 일치시킨다. (보다 큰 타입으로 일치)
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 로 변환한다.
단항 연산자
1. 증감 연산자 ++, - -
- 증가 연산자(++) : 피연산자의 값을 1 증가시킨다.
- 감소 연산자(- -) : 피연산자의 값을 1 감소시킨다.
- 전위형 : 값이 참조되기 전에 증가시킨다. ex) ++i;
- 후위형 : 값이 참조된 후에 증가시킨다. ex) i++;
- 수식이나 메서드 호출에 포함되지 않고 독립적인 하나의 문장으로 쓰인 경우에는 전위형과 후위형의 차이가 없다.
[표현식]
(증감 연산자)값; 또는 값(증감 연산자);
▶ 증감 연산자는 피연산자의 값은 1 증가시키거나 1 감소시키는 연산자이다.
▶ ++ : 피연산자의 값을 1 증가시키는 연산자 (++값; 또는 값++;)
▶ -- : 피연산자의 값을 1 감소시키는 연산자 (--값; 또는 값--;)
▶ (증감 연산자)값 : 전위 연산으로 먼저 증감 연산을 수행하고 다른 연산을 수행한다.
▶ 값(증감 연산자) : 후위 연산으로 먼저 다른 연산을 수행하고 증감 연산을 수행한다.
public class B_inDecrease {
public void method1() {
int num = 10;
// 전위 연산 테스트
System.out.println("전위 연산자 적용 전 num의 값: " + num); // 10
System.err.println("1회 수행 후 값 : " + ++num); // 11 (num = num + 1)
System.err.println("2회 수행 후 값 : " + ++num); // 12 (num = num + 1)
System.err.println("3회 수행 후 값 : " + ++num); // 13 (num = num + 1)
System.out.println("전위 연산자 적용 후 num의 값: " + num); // 13
System.out.println();
// 후위 연산자 테스트
System.out.println("후위 연산자 적용 전 num의 값: " + num); // 13
System.err.println("1회 수행 후 값 : " + num++); // 13(14)
System.err.println("2회 수행 후 값 : " + num++); // 14(15)
System.err.println("3회 수행 후 값 : " + num++); // 15(16)
System.out.println("전위 연산자 적용 후 num의 값: " + num); // 16
}
public void method2() {
int num = 20;
int num1 = 10;
int num2 = 20;
int num3 = 30;
int result = num++ * 3; // 20 * 3 = 60 -> 20 + 1 = 21
System.out.println("num : " + num); // 21
System.out.println("result : " + result); // 60
System.out.println(num1++); // 10(11)
System.out.println((++num1) + (num2++)); // 12 + 20(21) = 32
System.out.println((num1++) + (--num2) + (--num3)); // 12(13) + 20 + 29 = 61
System.out.println("num1 : " + num1); // 13
System.out.println("num2 : " + num2); // 20
System.out.println("num3 : " + num3); // 29
}
}
2. 부호 연산자 + -
- 부호 연산자’-’는 피연산자의 부호를 반대로 변경한 결과를 반환한다.
- 부호 연산자’+’는 하는 일이 없으며, 쓰이는 경우도 거의 없다.
- 부호 연산자는 boolean형과 char형을 제외한 기본형에만 사용할 수 있다.
int num = -10;
'Java' 카테고리의 다른 글
연산자(Operator) - 논리 연산자 & 그 외의 연산자 (0) | 2022.08.18 |
---|---|
연산자(Operator) - 산술 연산자 & 비교 연산자 (0) | 2022.08.17 |
변수(Variable) - 형변환 (0) | 2022.08.16 |
변수(Variable) - 변수의 타입 : printf() & Scanner (0) | 2022.08.16 |
변수(Variable) - 변수와 상수 (0) | 2022.08.15 |