[Java] 이항 연산자 1 - 산술 연산자

🌈 m1naworld ·2022년 11월 11일
0

자바를 잡아! 👻

목록 보기
12/19
post-thumbnail

이항 연산자

이항 연산자는 피연산자가 2개인 연산자를 말한다.

  • 이항 연산자 종류


산술 연산자

산술 연산자의 특징은 피연산자들의 타입이 동일하지 않을 경우 다음과 같은 규칙을 사용해서 피연산자들의 타입을 일치시킨 후 연산을 수행한다는 점이다. long 타입을 제외한 정수 타입 연산은 int 타입으로 산출되고, 피연산자 중 하나라도 실수 타입이면 실수 타입으로 산출된다.


1. long타입을 제외한 정수 타입(byte, short, char)일 경우 모두 int 타입으로 변환된 후에 연산을 수행한다. char 또한 정수타입으로 산술 연산시 유니코드로 변환되어 계산된다.

// byte 예시

byte byte1 = 1;
byte byte2 = 1;

byte byte3 = byte1 + byte2; // 컴파일 에러 
int byte3 = byte1 + byte2; // 올바른 예시
// char 예시

char c1 = 'A' + 1; // chart c1 = 66; >>> 리터럴 간의 연산은 컴파일 단계에서 수행하기 때문에 타입 변환이 없어 아무런 문제가 되지 않음
char c2 = 'A' 

char c3 = c2 + 1; //chart 변수가 산술 연산에 사용되면 int 타입으로 변환되므로 컴파일 에러 발생
int c3 = c2 + 1; // 올바른 예시: int타입으로 지정
chart c3 = (char) (c2 + 1) // 올바른 예시: 강제 타입 변환 

2. 피연산자들이 모두 정수 타입이고 long 타입이 포함되어 있을 경우, 모두 long 타입으로 변환된 후 연산을 수행 한다.

int + long ➡️ long + long = long

3. 피연산자 중 실수 타입(float, double)이 있을 경우, 허용 범위가 큰 실수 타입으로 변환된 후 연산을 수행한다.

// 예시)

int int1 = 10;
int int2 = 4;
int result2 = int1 / int2; // 결과: 2 - (1번 예제)
double result3 = int1 / int2; // 결과: 2.0 - (2번 예제)
// 소수점자리의 값까지 얻고 싶을 경우

double result3 = (int1 + 1.0) / int2;  // 결과: 2.5 >> 실수 타입으로 만든 후 산술 연산
double result3 = (double) int1 / int2;  // 결과: 2.5 >> 강제 타입 변환
double result3 = int1 / (double) int2;  // 결과: 2.5 >> 강제 타입 변환

Java에서는 (1번 예제) intint로 나눈 연산 결과는 소수점 이하 부분을 버리고 정수부분만 산출된다.
또한 (2번 예제) intint로 나눈 연산 결과 값을 double타입으로 지정해주어도 double타입 변수에 대입하는 것이므로 실수화를 할 뿐 소수점까지 나눠진 값이 나오진 않는다.
만약, 나눈 값의 소수점까지를 결과로 얻고 싶다면 피연산자 중 최소 하나는 실수 타입이여야 한다!



Ref.
책: 혼자 공부하는 자바

profile
개발자로 사는 내 삶은 즐거워 👾

0개의 댓글