【연산자】3. 이항 연산자 (Binary Operator)_산술(사칙) 연산자
이항 연산자의 산술 연산자(사칙 연산자)에 대해 알아본다.
● 연산자는 크게 보면 단항 연산자, 이항 연산자, 삼항 연산자로 나뉘는데, 나뉘는 기준은 연산을 할 때 연산 대상이 되는 피 연산자의 개수가 몇 개냐가 기준이 된다.
따라서 피 연산자가 1개인 경우 단항 연산자, 2개인 경우 이항 연산자, 3개인 경우 삼항 연산자라고 생각하면 된다.
● 연산자는 연산을 하는 방향과, 여러 연산자가 같이 있을 때 어느 연산을 먼저 하는가 에 대한 연산 우선순위가 있으므로 아래 표를 참조하도록 하자.
예를 들어 「-2 + 3」이란 수식이 있다면 단항 연산자가 이항 연산자보다 우선순위가 높기 때문에 단항 연산자 중 하나인 부호 연산자가 2에 -1을 곱해 부호를 바꿔 -2를 만들고 그다음 -2와 3을 더하는 연산이 이항 연산자 중 하나인 사칙 연산자에 의해 이루어진다.
다만, 연산 순위가 잘 이해되지 않는다면 괄호를 적절히 사용해서 우선순위를 지정해 주는 것도 하나의 방법이 될 수 있다.
분류 | 연산자 | 연산방향 | 연산순위 | ||
단항 연산자 | 증감 연산자 | ++ -- | 🡸 | 1 |
|
부호 연산자 | + - | 🡺 | |||
비트전환 연산자 | ~ | 🡺 | |||
논리부정 연산자 | ! | 🡺 | |||
이항 연산자 |
산술 연산자 | 나머지 연산자 | % | 🡺 | 2 |
사칙 연산자 |
* / | 🡺 | |||
+ - | 🡺 | 3 | |||
쉬프트 연산자 | << >> >>> | 🡺 | 4 | ||
비교 연산자 | 대소비교 연산자 | < > <= >= instanceof | 🡺 | 5 | |
등가비교 연산자 | == != | 🡺 | 6 | ||
논리 연산자 |
비트 연산자 |
& | 🡺 | 7 | |
^ | 🡺 | 8 | |||
| | 🡺 | 9 | |||
논리 연산자 |
&& | 🡺 | 10 | ||
|| | 🡺 | 11 | |||
그 외 연산자 | 삼항 연산자 | ? : | 🡺 | 12 | |
대입 연산자 (할당 연산자) | = *= /= %= += -= <<= >>= >>>= &= |= ^= | 🡸 | 13 |
◆ 사칙 연산자 ( *, /, +, - )
※ 우리가 흔히 알고 있는 사칙연산으로써 프로그램에서 가장 많이 사용되는 연산자이다.
※ 곱셈과 나눗셈이 먼저 연산된 뒤에 덧셈과 뺄셈이 연산된다.
※ 피연산자가 정수형(byte, short, int, long)인 경우 나누는 수로 0을 사용할 수 없다. (실행 시 ArithmeticException 오류 발생)
사칙 연산자 |
* | 곱셈 |
/ | 나눗셈 | |
+ | 덧셈 | |
- | 뺄셈 |
※ int형(4byte) 미만의 자료형은 int형으로 변환 후에 연산된다.
※ 4byte 이상의 자료형(int, long, float, double) 부터는 두 개의 피연산자 중 자료형의 범위가 더 큰 쪽에 맞춰서 변환 후에 연산된다. (범위는 아래 표를 참조)
자료형 타입 | 범위 | 크기 (bit) | 크기 (byte) |
char | ‘\u0000’ ~ ‘\uFFFF’ | 16 bit | 2 byte |
byte | -128 ~ +127 | 8 bit | 1 byte |
short | -32,768 ~ +32,767 | 16 bit | 2 byte |
int | -2,147,483,638 ~ +2,147,483,647 | 32 bit | 4 byte |
long | -9223372036854775808 ~ +9223372036854775807 | 64 bit | 8 byte |
float | -3.402932347e+38 ~ +3.40292347e+38 | 32 bit | 4 byte |
double | -179769313486231570e+308 ~ 1.79769313486231570e+08 | 64 bit | 8 byte |
/*
* byte형은 int형보다 작기 때문에 int형으로 변환 후에 연산된다.
* 결국 byte형 + byte형 이 아닌 int형 + int형의 연산이 진행되기 때문에 결과값도 int형이다.
* 결과값이 int형이기 때문에 형변환 없이 결과값을 int형보다 작은 byte형 변수에 담으려고 하면 타입이 맞지않아 에러가 발생한다.
*/
byte a = 1;
byte b = 2;
byte c = a + b; //NG (int형 결과를 byte형 변수에 담으려 하기 때문에 에러)
byte d = (byte) a + b; //OK (int형 결과를 byte형으로 형변환 후에 byte형 변수에 담기 때문에 문제없음)
int e = a + b; //OK (int형 결과를 int형 변수에 담기 때문에 문제없음 )
//다른형끼리 연산할 경우
byte a = 1;
short b = 2;
int c = a + b; //OK (int형 + int형으로 연산하기 때문에 int형 변수에 결과를 담아도 문제없음)
피연산자 타입에 따른 연산결과 예시 | |||
피연산자1 | 연산 (*, /, +, - ) |
피연산자2 | 연산결과 |
byte | short | int | |
short | short | int | |
char | int | int | |
int | int | int | |
int | long | long | |
long | long | long | |
long | float | float | |
short | float | float | |
float | double | double | |
double | double | double |
【연산자】1. 단항 연산자 (Unary Operator)
【연산자】2. 이항 연산자 (Binary Operator)_산술(나머지) 연산자
【연산자】4. 이항 연산자 (Binary Operator)_산술(쉬프트) 연산자
글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --