[Kotlin][언어공부-2]Kotlin숫자형, 음수표현법? 자료형 비트?,음수표현법에 2의보수가 등장하는 이유?

2020. 6. 9. 17:01Android/Kotlin

코틀린의 숫자형은 자바랑 비슷하다.

 

    var double : Double = 110.1 //dobule 형
    var float : Float = 100.1f //float형
    var long : Long  = 110 //Long형
    var int : Int = 30 //Int형
    var short : Short = 30 //short 형
    var byte : Byte = 10 //byte형

    //int를 double로 캐스팅
    double = int.toDouble()
    println(double)
    //문자열로 변환
    println (double.toString())

    //문자를 숫자로 변환
    println ("100".toInt()+10)
    //자바로 치자면 (Integer.parseInt("100")+10)

 

자바는 toString() 함수를 유용하게 사용했었는데 캐스팅할때는 valueOf나 parse~를 써야되서 불편했었다

이를 통일해주어서 더 보기 편한 느낌이다 

 

여기서 끝내긴 글이 너무 짧으니 오랜만에 숫자형을 알아보는김에 자바의 변수형 저장범위도 알아보자 

byte

8bit
(1바이트)

-128 ~ 127(-2의7제곱~2의7제곱-1)
개수:2의8제곱

short

16bit
(2바이트)

-32,768 ~ 32,767(-2의15제곱~2의15제곱-1)
개수:2의16제곱

int

32bit
(4바이트)

-2,147,483,648 ~ 2,147,483,647(-2의31제곱~2의31제곱-1)
개수:2의32제곱

long

64bit
(8바이트)

-9,223,372,036,854,775,808~9,223,372,036,854,775,807
(-2의63제곱~2의63제곱-1)
개수:2의64제곱

float

32bit
(4바이트)

±3.40282347E+38, ±1.40239846E-45,
IEEE 754-1985표준

double

64bit
(8바이트)

-1.79769313486231570E308~+1.79769313486231570E308



위와 같다.

코딩을 할때 변수타입을 int로 썼는데 2,147,483,647이상의 값이 들어가는 경우 오류가 발생할 때가 있다.

이때는 자료형을 변경해 주어야하고 db형식과도 맞춰주어야 한다. 예전에는 

 

-2의7제곱~2의7제곱-1

 이 대체 무엇을 의미하는 거며 왜 이렇게 되는건지 궁금해서 대충 찾아보고 이해했었는데 정처기를 공부하다가 개념을 바로 잡았던거 같다.

 

컴퓨터는 이진수로 이해를 하고

1bit = 0과 1

1byte = 8bit 

의 개념을 알고 있으면 편했다.

 

간단하게 byte로 보자면 8bit 니까 이진수로 보면

0 000 0000            ->   0

0 000 0001            ->   1

0 000 0010            ->   2

 

위와 같이 된다. 그러면 2의8제곱 까지 수를 표현할 수 있어야 하는데 맨 앞자리는

- 즉 보수를 표현하기 위해 사용하니 (0일때 + , -일때 1) 

 

1 111 1111             ->   -1

 

뒤의 1111111  만 갖고 사용한다. 그러니 -2의 7제곱~2의 7제곱-1 과같은 범위가 나오는 것이다 (-1은 0의 값)

 

여기서

1 000 0001          -> 0???????? 이아닌 

 

1 111 1111             ->   -1                이 되는게 궁금할 수 도 있는데 이는

 

컴퓨터에서 음수표현법이 

0 000 0001           -> 1 

1이 있으면 얘를 뒤집어서 보수를 만들어주고 

 

1 111 1110           -> 1의 보수

거기다가 1을 더하면 2의보수가 나온다 음수는 2의 보수로 표현한다.

 

1 111 1111            -> 1의 보수 +1        (->2의보수 얘를 음수라함)

 

 

 

 

 

위와 같이 표현하면 된다고 알고 넘어가면 되는데 왜 위와 같이 표현한지 궁금했었다.

정처기 공부할때 어떻게 이해하고 넘어갔냐면

 

음수표현법에 2의보수가 등장하는 이유

 

컴퓨터에선 - 계산이 안되서 - 계산을 할려면 1 + (-1) = 0 과 같이 표현해야되는데 

위의 1000001=-1 일시 이를 비트로 계산하면

1. 

  00000001         -> 1

+10000001         -> -1

--------------

 

  1000010 -> -2      가 되는 현상이 나와버린다. 이럼 이상하네??

 

  그럼 2의보수로 계산해보자

 

 2.

  00000001

+11111111  (2의보수,음수)

--------------------
1 00000010        

 8bit 니까 앞자리 떼고 00000000   만쓰면  원하는결과 1+(-1) =0 가 나온다.

 

즉 위와 같은 논리를 위하여 2의보수라는 개념을 만들어줬다고 생각하고 넘어갔었던걸로 기억한다.

 

 

 

반응형