Notice
Recent Posts
Recent Comments
05-18 00:26
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Computer Language - Casting(Type conversion) 본문

Programming Language/Java

Computer Language - Casting(Type conversion)

알 수 없는 사용자 2023. 3. 13. 19:12

Java의 서로 용량(크기)이 다른 데이터 타입끼리의 연산을 살펴보자.

 

Casting(형변환)

 형변환을 Casting이라고 하는데, 이는 "연산 수행시가 아니"라 그냥 형변환이 일어나는 곳에 사용하는 개념이다. (연산 수행시는 뒤에 나올 예정이다.)

 

Narrowing Casting (축소 형변환, 강제 형변환)

 크기가 큰 데이터 타입에서 작은 데이터 타입으로 변환하고 싶을 때 적용(사용)되는 개념이고, 일반적으로 그냥 Casting이라고 함은 이를 의미한다.

long bigNum = 100000000000000000L;
int num = (int) bigNum; //(Narrowing Casting 사용)

 

Widening Casting (확대 형변환, 자동 형변환)

 크기가 작은 데이터 타입에서 큰 데이터 타입으로 변환하고 싶을 때 적용되는 개념이다.

byte b = 10;
int n = b;

 이와 비슷한 개념으로 연산을 수행할 때, 타입이 서로 같은 피연산자 끼리의 연산을 위해 casting하는 것을 promotion이라고 한다.

 

public class Main {
    public static void main(String[] args) {
	System.out.println((byte) 227); //-29
    }
}

 해당 연산은 promotion의 예이며, byte는 -128에서 127까지의 수만 표현이 가능하다. 따라서 127이 넘어가는 128부터는 0b10000000이고, byte의 MSB는 -를 의미하게 된다. 즉, 128은 byte에서는 -128을 의미하게 된다. 129는 -127, 130은 -126, .... 따라서, -29가 되는 것이다. 이를 연산으로 표현하면 다음과 같다. 227은 0b11100011이고, 0을 1로 1을 0으로 바꿔준다. 마지막으로 1을 더해주면 끝이 난다. (이런 계산 방법을 2의 보수법이라고 하는데, 해당 방법은 unsigned type인지 signed type인지에 따라 다르다.)

 기본적으로 다음 순서로 데이터 수용 용량이 커진다고 생각하면 된다.

byte ⇒ short ⇒ int ⇒ float ⇒ double

Comments