부동 소수점 이해
- 32비트와 64비트의 부동 소수점 표현
- -12.375(10)의 표현
- 음수 : –
- 127(bias) 기준으로 구분
- 절댓값 : 12.375
- 1100.011(2)
- 1.100011 * 23
- 1생략
- 100011을 가수부에 표현
- -> 127 + 3 = 130(10) = 10000010(2)
- 음수 : –
- -12.375(10)의 표현
IEEE 방식의 부동 소수점 제한
- 공간 제약에 따른 부동 소수점 연산의 단점
fun main() { var num: Double = 0.1 for( x in 0..999 ) { Num += 0.1 } println(num) } // 결과값 : 100.09999999999859 |
2의 보수란?
- 자료형의 최소 최대
- 음수는 2의 보수 표현을 사용해 연산된다.
- 절댓값의 이진수에 값을 뒤집고 1을 더한다.
- 음수는 2의 보수 표현을 사용해 연산된다.
ex) -6 – 6의 2진값: 0000 0110 – 값 뒤집기 : 1111 1001 – 1을 더하기 : 1111 1010 |
- 왜? 제한된 자료형을 음수/양수로 나누어 최대한 사용하며 2의 보수는 가산 회로만으로 뺄셈을 표현할 수 있기 때문에
그 밖의 자료형
- 논리 자료형
형식 | 자료형 | 크기 | 값의 범위 |
논리형 | Boolean | 1비트 | True, False |
val isOpen = true // isOpen은 Boolean으로 추론 val isUploaded: Boolean // 선언만 한 경우 자료형(Boolean)을 반드시 명시 |
- 문자 자료형
형식 | 자료형 | 크기 | 값의 범위 |
문자 | char | 2바이트(16비트) | 0~215-1(\u0000 ~ \uffff) |
val ch = ‘c’ // ch는 Char로 추론 val ch2: Char // 선언만 한 경우 자료형(Char)를 반드시 명시 |
- 문자열
- String으로 선언되며 String Pool이라는 공간에 구성한다.
Fun main() { var str1: String = “Hello” var str2 = “world” var str3 = “Hello” println(“str1 === str2: ${str1 === str2}”) // false println(“str1 === str3: ${str1 === str3}”) // true } |
표현식에서 문자열
- 표현식과 $ 기호를 사용하여 문자열 출력하기
var a = 1 val s1 = “a is $a” // String 자료형의 s1을 선언하고 초기화. 변수 a가 사용됨 |