더북(TheBook)

정수 타입 사이의 변환은 대상 타입이 더 큰 범위를 담는 타입인 경우 손실 없이 수행된다. 그렇지 않은 경우 MSB(2진수로 표현했을 때 상위 비트 쪽)를 잘라내고 나머지를 대상 타입의 값으로 변환한다. Char 타입을 다른 타입의 값으로 바꾸거나 다른 타입의 값을 Char 타입으로 바꾸는 경우도 그렇다.

val n = 945
println(n.toByte())  // -79
println(n.toShort()) // 945
println(n.toChar())  // α
println(n.toLong())  // 945

부동소수점 수 타입과 관련된 변환의 경우, 일반적으로 대상 타입과 무관하게 정밀도를 잃을 수 있다. 예를 들어 LongFloat로 변환하면 LSB 쪽(2진수로 표현했을 때 하위 비트 쪽)을 잃어버릴 수 있다. 부동소수점 수를 정수로 변환하는 연산은 기본적으로 0 쪽으로 어림(rounding to zere)3하는 연산이다.

println(2.5.toInt())    // 2
println((-2.5).toInt()) // -2
println(1_000_000_000_000.toFloat().toLong()) // 999999995904
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.