3.3.1 덧셈
a+b
3.3.2 뺄셈
a-b
3.3.3 곱셈
a*b
3.3.4 나눗셈
- 나머지가 있으면 버림
a/b
3.3.5 연산 형변환
- 연산 결과를 int보다 작은 자료형에 넣을 때 발생되는 에러
byte a = 10;
byte b = 20;
byte c = a + b; //Error! 연산시 a,b는 int로 변환되기 때문에 int보다 작은 byte로 저장하면 안됨
byte d = (byte) a + b; //d=30
- 자료형보다 큰 값을 넣을때 발생하는 값 손실1
byte a = 10;
byte b = 30;
byte c = (byte)(a*b); //c = 44
/*
byte는 8bit이므로 최대 127까지 저장할 수 있는데, a*b의 결과가 300이므로 값이 손실됨
9번째 bit부터 제거
*/
- 자료형보다 큰 값을 넣을때 발생하는 값 에러1
int a = 1_000_000;
int b = 2_000_000;
long c = a * b; //c= -1,454,759,936
/*
a*b의 결과는 int이므로 연산후 long에 넣는다 해도 int의 결과로 쓰레기 값이 들어감
a와 b 둘중 하나라도 long으로 바꾸면 해결
*/
- 자료형보다 큰 값을 넣을때 발생하는 값 에러2
long a = 1_000_000 * 1_000_000; //a= -727379968
long b = 1_000_000 * 1_000_000L; //b= 1,000,000,000,000
/*
a의 경우 int*int = int이기 때문에 long에 대입을 한다 하더라도 쓰레기 값이 들어감
b의 경우 int*long=long이기 때문에 정상 연산 결과가 대입됨
*/
-연산 순서에 따른 허용범위 초과 에러
int a = 1_000_000;
int result1 = a * a / a; //result1 = -727
int result2 = a / a * a; //result2 = 1,000,000
/*
result1의 a*a에서 int의 허용 범위를 넘어버리기 때문에 에러
result2에서 a/a먼저 하므로 int의 허용 범위를 초과하지 않음
*/
3.3.6 문자 연산
- 문자 + 숫자
char c1 = 'a'
char c2 = (char)(c1 + 1) //c2 = 'b'
char c3 = c1 + 1 //Error! char + int = int이기 때문에 c3를 int로 바꿔야 한다.
char c4 = (char)('a' + 1) //ch4= 'b' 리터럴 + 리터럴은 가능
- 소문자 → 대문자
char low = 'a';
char upper = (char)(low -32); //upper = 'A'
/*
ASCII에서 'a'와 'A'의 위치 차이가 32이기 때문에 32를 빼면 대문자로 변환가능
반대로, 'A'에서 32를 더하면 'a'로 변환 가능
*/
3.3.7 반올림
double pi = 3.141592;
double shortPi1 = (int)(pi * 1000 + 0.5) / 1000.0; //shortPi1 = 3.141f
double shortPi2 = Math.round(pi * 1000) / 1000.0;
/*
나눗셈을 하면 소숫점 이하는 버림이 되므로 0.5를 더하면 반올림이 되게 할 수 있다.
shortPi1의 결과가 float인 이유는 int / float = float이기 때문이다.
*/
3.3.8 나머지 연산자
int x = 10;
int y = 8;
int r = x % y //r = 2
3.3.9 복합 대입 연산자(op=)
int i = 0;
int j = 0;
i += 3; //i = 3
i *= 10 + 5; // i = i *(10+5)
'자바의 정석 정리' 카테고리의 다른 글
자바의 정석 - 3.5 논리 연산자 (0) | 2022.06.04 |
---|---|
자바의 정석 - 3.4 비교 연산자 (0) | 2022.06.04 |
자바의 정석 - 3.2 단항 연산자 (0) | 2022.06.04 |
자바의 정석 - 3.1 연산자 (0) | 2022.06.04 |
자바의 정석 - 2.4 아스키(ASCII) (0) | 2022.06.04 |