티스토리 뷰

개발/JAVA

사칙 연산자와 산술변환

aihtnyc_h 2023. 1. 18. 23:57
728x90
반응형
SMALL

사칙 연산자

덧셈(+) 뺄셈(-) 곱셈() 나눗셈(/)*

class Operator4_1 {
    public static void main(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.5
        System.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 타입으로 변환시킨 후 계산하는 것이다.

class Operator4_2 {
    public static void main(String[] args) {
        char ch = '2';

        // 문자 '2' 는 숫자로 50, '0' 은 48
        // 따라서 int 타입으로 자동으로 변하기 때문에 50 - 48 = 2
        System.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; // -1454759936

        long l = (long)a * b;
        // long * int -> long * long => 1_000_000L * 2_000_000 -> 1_000_000L * 2_000_000L
        System.out.println("l = " + l);
    }
}
728x90
반응형
LIST

'개발 > JAVA' 카테고리의 다른 글

비교 연산자와 문자열의 비교  (0) 2023.01.18
Math 클래스와 나머지 연산자  (0) 2023.01.18
형변환 연산자와 자동 형변환  (0) 2023.01.18
증감 연산자와 부호 연산자  (0) 2023.01.18
연산자  (0) 2023.01.18
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함