2020. 6. 9. 17:01ㆍAndroid/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 |
-128 ~ 127(-2의7제곱~2의7제곱-1) |
short |
16bit |
-32,768 ~ 32,767(-2의15제곱~2의15제곱-1) |
int |
32bit |
-2,147,483,648 ~ 2,147,483,647(-2의31제곱~2의31제곱-1) |
long |
64bit |
-9,223,372,036,854,775,808~9,223,372,036,854,775,807 |
float |
32bit |
±3.40282347E+38, ±1.40239846E-45, |
double |
64bit |
-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의보수라는 개념을 만들어줬다고 생각하고 넘어갔었던걸로 기억한다.
'Android > Kotlin' 카테고리의 다른 글
[Kotlin][언어공부-5] function (0) | 2020.06.16 |
---|---|
[Kotlin][언어공부-4] Any형 (0) | 2020.06.10 |
[Kotlin][언어공부-3] 문자열 (0) | 2020.06.10 |
[Kotlin][언어공부-1] First 먼저 알아야 할 것 (0) | 2020.06.09 |
[Kotlin] 코틀린에서 자바 변수 사용? 프로퍼티 의문점 (0) | 2020.06.03 |