classOperator4_1 {publicstaticvoidmain(String[] args) {int a =10, b =4;// 덧셈System.out.print("a + b = ");System.out.println(a + b);// 뺄셈System.out.print("a - b = ");System.out.println(a - b);// 곱셈System.out.print("a * b = ");System.out.println(a * b);// 나눗셈// 소수점 이하는 버려진다.System.out.print("a / b = ");System.out.println(a / b);// 10 / 4.0f -> 10.0f / 4.0f -> 2.5System.out.print("a / (float)b = ");System.out.println(a / (float)b); }}
산술변환
연산 전에 피연산자의 타입을 일치시키는 것을 의미합니다.
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
이는 int 보다 작은 타입이 계산을 통해 쉽게 범위가 넘어갈 수 있기 때문에 오버플로우가 발생해
정확한 계산값을 가져오지 못할 수 있어서 미리 큰 범위인 int 타입으로 변환시킨 후 계산하는 것입니다.
아래 예제코드로 학습해 보겠습니다.
classOperator4_2 {publicstaticvoidmain(String[] args) {char ch ='2';// 문자 '2' 는 숫자로 50, '0' 은 48// 따라서 int 타입으로 자동으로 변하기 때문에 50 - 48 = 2System.out.print("ch - '0' = ");System.out.println(ch -'0');int a =1_000_000; // 1백만int b =2_000_000; // 2백만// a * b = 2_000_000_000_000 -> 10^12// long 에 저장하려는 것은 맞지만 a * b 의 결과 타입이 int// 따라서 이미 계산을 할 때 오버플로우 발생! -> 따라서 계산을 할 때 형변환 필요!// long l = a * b; // -1454759936long l = (long)a * b;// long * int -> long * long => 1_000_000L * 2_000_000 -> 1_000_000L * 2_000_000LSystem.out.println("l = "+ l); }}