728x90
반응형
이항 연산자의 산술 연산자(사칙 연산자)에 대해 알아본다.

 

● 연산자는 크게 보면 단항 연산자, 이항 연산자, 삼항 연산자로 나뉘는데, 나뉘는 기준은 연산을 할 때 연산 대상이 되는 피 연산자의 개수가 몇 개냐가 기준이 된다.

따라서 피 연산자가 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

 


글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --

 

728x90
반응형