티스토리 뷰

 오늘은 코틀린에 있는 정수 타입(형식)실수 타입(형식)에 대해서 알아보도록 하겠습니다. 다른 언어와 비슷한 점도 있으나 다른 점 또한 존재하므로 한 번에 설명드리도록 하겠습니다. 그럼 바로 예제 코드를 보시죠. 🧊

현재 당신이 공부중인 챕터

예제 코드

예제 코드입니다.

fun main(args:Array<String>):Unit
{
    val a:Byte = 125
    val b:Short = (100 + 200) * 100 //30000
    var c:Int = 12_4354_6538 //가시성 향상 표기법
    c = 0xFF_88_88 //0x는 16진수
    c = 0b01010010_01100011_01110101_01000101 //0b는 2진수 //8진법은 지원x
    var d:Long = -543_7847_3984_7238_4723 //자동 Long

    c = a + b //byte+short =Int //byte+byte=Int //short+short=Int
    d = c + 10L //L=Long

    var e:Float = 67.6f //f=Float
    val f:Double = 658.456
    e = (e + f).toFloat() //e는 Float 타입 이므로
    println(e) //이상한데? 이건 다음 글을 참고
}

아래는 실행 결과입니다.

726.05597

Process finished with exit code 0

코드 설명

코드를 설명하기 전에 타입의 종류와 단위, 용량, 저장 가능 범위에 대해서 알아보겠습니다.

종류 타입 이름 용량 (단위: Byte) 저장 가능한 범위
정수 타입 Byte 1 -128~127
Short 2 -3만 2768~3만 2767
Int 4 -21억 4748만 3648
~
21억 4748만 3647
Long 8 -992경 3372조 0368억 5477만 5808
~
922경 3372조 0368억 5477만 5807
실수타입 Float 4 1.410-45
~
3.402823510308

Double 8 4.910-324
~
1.797693134862315710308

 위 표를 참고하시면서 아래 설명을 읽어나가시면 됩니다.

위 사진 왼쪽에 있는 줄번호 순서로 설명

3(번 라인 설명) : a라는 변수를 선언하고 타입을 Byte로 지정했습니다. 125는 Byte가 저장할 수 있는 범위 내 이므로 자동으로  Byte로 저장 가능합니다. 때문에 정상적으로 대입됩니다.

4: b라는 이름의 변수를 선언하고 Short로 형식을 설정합니다. 괄호 안의 값이 먼저 계산되므로 30000이 저장됩니다. 마찬가지로 30000또한 Short가 저장할 수 있는 범위 내이기 때문에 문제없이 저장됩니다.

5: c라는 이름의 변수 선언입니다. 이때 Int형식으로 지정을 해주었고 1243546538이라는 숫자를 저장했습니다. 여기서 언더바(_)는 가시성을 위해서 사용할 수 있는 키워드입니다. 아무 위치에나 자유롭게 개수 제한 없이 사용이 가능합니다. 숫자가 길어질 경우에 한눈에 보기가 쉽지 않은데 이를 사용하면 보기가 무척 쉬워집니다.

6: c라는 변수에 16진수 0xFF8888을 대입합니다. 마찬가지로 언더바를 사용할 수도 있습니다. 0x를 붙여주게 되면 16진수 표기인 것이죠.

7: 다음으로 마찬가지로 0b를 시작으로 한다면 2진수 표기가 되겠습니다. 코틀린은 8진수를 지원하지 않습니다. (개인적인 생각으로는 잘 사용하지 않기 때문에 빼버린 것 같습니다.)

8: 다음은 d라는 Long타입 변수입니다. 마찬가지로 Long범위 내에 있는 숫자이므로 자동으로 Long형으로 저장되는데 무리가 없습니다.

10: Int형 변수 c에 Byte변수 a 그리고 Short 변수 b를 더해 저장합니다. 이때 결과는 무조건 Int가 됩니다. byte+short 뿐만 아니라 byte+byte, short+short의 경우에도 무조건 Int로 자동 변환이 됩니다. 이점은 염두에 두시기 바랍니다.

11: Int형 변수 c에 Long 타입 10을 더하고 있습니다. Int+Long의 경우에는 무조건 결과가 Long이 됩니다. 결과가 Int의 범위보다 커질 수 있기 때문에 당연한 결과입니다.

12: 공백 라인입니다. 🍺

13: Float형 변수 e입니다. 실수 f를 해주면 Float형 실수를 나타냅니다. 실수 타입의 경우 범위라기보다는 소수점을 나타낼 수 있는 자릿수를 범위로 나타냅니다. x.xxxxx를 유효숫자와 지수만 저장한 다음에 계산하기 때문에 소수점(.) 부분이 둥둥 떠다니는 것처럼 보인다고 해서 부동 소수점(Floating Point) 방식이라고 해서 Float입니다.

14: f라는 이름의 Double형 변수입니다. Float보다 두배(double) 정밀도를 가지기 때문에 Double입니다. 658.456을 저장해주면 더블형으로 f에 저장됩니다.

15: e + f의 결과의 경우 Double형이 되지만, 현재 대입하려는 e가 Float 타입이므로 .toFloat() 메서드를 사용해서 Float로 변환 후 e에 대입해주는 모습입니다.

16: 하지만 결과의 경우 원래...

위와 같이 726.056이 나와야 하지만 실제로는 726.05597이 나온 것을 알 수 있습니다. 왜?! 궁금하시면 다음 글을 참고하시기 바랍니다. 이 글이 도움이 되셨다면 아래 공감 하트 꾸욱 부탁드립니다.

※ 본 글은 초보자를 위한 코틀린 200제를 바탕으로 공부한 내용입니다.

[Android/Kotlin] - [코틀린] 비트 연산자 7개 한 번에 이해하기 (and, or, xor, inv, shl, shr, ushr)

[Android/Kotlin] - [코틀린] 증감 연산자(++,--) 이해하는데 3초 컷

[Android/Kotlin] - [코틀린] 산술 연산자 +-*/% (Arithmetic Operator) 초간단 이해 법

내용 추가 1

  • 2021-04-20 내용 추가 (예제 코드)
  • unsigned 자료형 예제 코드
package chap02.section2

fun main(num07: Int, exp02: Long, ubyte: UByte ){
    val num05 = 127 // Int
    val num06 = -32768 // Int
    val num07 = 2147483647 // Int
    val num08 = 9223372036854775807 // Long

    val exp01 = 123
    val exp02 = 123L // Long
    val exp03 = 0x0F // Int 16진수
    val exp04 = 0b00001011 // Int 2진수
    // 8진수는 지원하지 않음

    // Byte 나 Short 자료형 사용하기
    val exp08: Byte = 127 // Byte로 명시하였기 때문에 Byte 형식으로 생성됨
    val exp09 = 32767 // Shot 범위를 갖고 있는 수여도 명시하지 않으면 Int로 간주
    val exp10: Short = 32767 // 명시적 Short 지정하였기에 Short로 생성됨

    // 2배 많은 양수 사용이 가능한 unsigned 변수 (1.3ver 실험적)
    val uint: UInt = 153u
    val ushort: UShort = 65535u
    val ulong: ULong = 46322342uL
    val ubyte: UByte = 255u

    val uint2 = 153u
    // val uint3: UInt = 153 // 불가능 (식별자 명시 안하면 할당 불가)
    
    // 언더 스코어로 자릿값 구분하기
    val number = 1_000_000
    val cardNum = 1234_1234_1234_1234L
    val hexVal = 0xAB_CD_EF_12
    val bytes = 0b1101_0010
}

 

댓글
최근에 올라온 글
최근에 달린 댓글
네이버 이웃추가
«   2024/04   »
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
글 보관함