정리/Java
자바의 정석 25~27강 증감 부호 형변환 사칙연산자, 자동형변환, 산술변환
민발자
2023. 4. 27. 21:01
728x90
ch 3-5,6 증감 연산자, 부호 연산자
1. 증감연산자
증가 : 피연산자의 값을 1 증가
감소 : 피연산자의 값을 1 감소
전위형 | 참조되기 전 증가 | ++i |
후위형 | 참조된 후 증가 | i++ |
2. 부호 연산자
- 는 피연산자 부호 반대호 변경
+ 아무것도 안함
ch3-7,8 형변환 연산자
1. 형변환
변수 또는 상수의 타입을 다른 타입으로 변환
(타입)피연산자
변환 | 수식 | 결과 |
int → char | (char)65 | 'A' |
char → int | (int)'A' | 65 |
float → int | (int)1.6f | 1 |
int → float | (float)10 | 10.0f |
2. 자동 형변환
값을 범위가 더 큰 타입에 저장할 때, 값손실이 없을 때 컴파일러가 자동으로 형변환
float에 int를 저장하는 경우 가능
int에 float를 저장하는 경우 값손실이 일어나 자동 형변환 불가
public static void main(String[] args) {
byte b = 100;
// byte b = (byte)100;
// 100은 리터럴이고 byte타입의 범위(-128~127)의 값이기 떄문에 자동 형변환
int i = 100;
// byte b2 = i;
// i라는 변수를 넣어주면 byte 범위에 있더라도 값이 변할수있기 때문에 자동형변환 불가
byte b2 = (byte)i;
}
ch 3-9,10 사칙 연산자, 산술 변환
1. 사칙 연산자
값 손실이 있으면 형변환 해주기
2. 산술 변환
연산 전에 피연산자의 타입을 일치시키는 것
1) 두 피연산자의 타입을 같에 일치(값손실을 최소화하기 위해 큰타입으로)
long + int → long + long = long
float + int → float + float = float
double + float → double + double = double
2) 피연산자의 타입이 int보다 작은 타입이면 int로 변환
byte + short → int + int = int
char + short → int + int = int
public static void main(String args[]) {
char ca = '2';
char cb = '0';
System.out.println(ca-cb);
// 2 = 50 0 = 48 -> 50-48
// 문자에서 숫자로 변경할 때 '2' -'0'을 빼는 이유
int a = 1_000_000; // 1,000,000 1백만 10의 6제곱
int b = 2_000_000; // 2,000,000 2백만 10의 6제곱
long c = a * b;
System.out.println("현변환 전 " + c);
// a * b = 2,000,000,000,000 ? 10의 12제곱
// int의 범위는 10의 9제곱 오버플로우 발생
// int * int = int
long d = (long)a * (long)b;
System.out.println("형변환 후 " + d);
}
728x90