연산자와 피 연산자

연산자가 연산을 수행하려면 반드시 연산의 대상이 있어야 하는데, 이것을 피 연산자(operand)라고 한다. 피 연산자로 상수, 변수 또는 식 등을 사용할 수 있다.

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

대부분의 연산자는 두 개의 피연산자를 필요로 하며, 하나 또는 세 개의 피연산자를 필요로 하는 연산자도 있다.

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

식과 대입 연산자

하나의 식을 평가(계산)하면 단 하나의 결과를 얻는다.

 

연산자의 종류

 

종류 연산자 설명
산술 연산자 + - * / % << >> 사칙 연산(+,-,*,/)과 나머지 연산(%)
비교 연산자 > < >= <= == != 크고 작음과 같고 다름을 비교
논리 연산자 && || ! & | ^ ~ '그리고(AND)'와 또는(OR)'으로 조건을 연결
대입 연산자 = 우변의 값을 좌변에 저장
기타 (type) ?: instanceof 형변환 연산자, 삼항 연산자, instanceof연산자

피연자의 개수에 의한 분류

피연산자의 개수로 연산자를 분류하기도 하는데, 피연산자의 개수가 하나면 단항 연산자, 두 개면 이항 연산자, 세 개면 삼항 연산자라고 부른다.

연산자를 기능별, 피연산자의 개수별로 나누어 분류하는 것은 연산자의 우선순위 때문이다.

 

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

기본적으로 곱셈과 나눗셈은 덧셈과 뺄셈보다 우선순위가 높다.

설명
-x + 3 단항 연산자가 이항 연산자보다 우선순위가 높다. 그래서 x의 부호를 바꾼 다음 덧셈이 수행된다. 여기서 '-'는 뺄셈 연산자가 아니라 부호 연산자이다.
x + 3 * y 곱셈과 나눗셈이 덧셈과 뺄셈보다 우선순위가 높다.
그래서 '3 * y'가  'x + 3'보다 먼저 계산된다.
x + 3 > y - 2 비교 연산자(>)보다 산술 연산자 +와-가 먼저 수행된다.
그래서x+3과y-2가 먼저 계산된 다음에 '>'가 수행된다.
x > 3 && x < 5 논리 연산자 &&보다 비교 연산자(>,<)가 먼저 수행된다.
그래서x>3와x<5가 먼저 계산된 다음에 &&가 수행된다.
식의 의미는 x가 3보다 크고 5보다 작다이다
result = x + y * 3; 대입 연산자는 연산자 중에서 제일 우선순위가 낮다.
그래서 우변의 최정 연산결과가 변수 result에 저장된다.

 

여기까지는 수학을 공부했다면 어느 정도 이해할 수 있는 연산자이고, 다음에는 프로그램에서 쓰이는 연산자의 우선순위를 알아보자

 

설명
x << 2 + 1 쉬프트 연산자(<<)는 덧셈 연산자보다 우선순위가 낮다.
그래서 왼쪽 식은2+1가 먼저 계산된다.
data & 0xFF == 0 비트연산자(&)는 비교 연산자(==)보다 우선순위가 낮으므로 비교연산 후에 비트연산이 수행된다. 그래서 왼쪽의 식은 0xFF == 0이 먼저 계산된다.
x < -1 || x > 3 && x < 5 논리 연산자 중에서 AND를 의미하는 &와 &&가 OR을 의미하는 |와||보다 우선순위가 높다/ 이처럼 수식에 AND와 OR가 함께 사용되는 경우는 괄호를 사용해서 우선순위를 명확히 하는 것이 좋다.

연산자의 결합 규칙

결합 규칙은 연산자마다 다르지만, 대부분 왼쪽에서 오른쪽의 순서로 연산을 수행하고, 단항 연산자와 대입 연산자만 오른쪽에서 왼쪽의 순서로 연산을 수행한다. 

 

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

 

산술 변환(usual arithmetic conversion)

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

int i = 10;
float f = 20.0f;

float result = f + (float)i; //형변환으로 두 피연산자의 타입을 일치
산술 변환이란? 연산 수행 직전에 발생하는 피연산자의 자동 형변환
1 두 피연산자의 타입을 같게 일치시킨다(보다 큰 타입으로 일치).
2 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

+ Recent posts