[Swift] 03.Numeric Type(Int,UInt,Float,Double)
Switf에는 정수형 type으로 Int와 UInt, 실수형으로 Float와 Double을 제공한다. 각 type에 붙은 숫자의 의미는 bit 수를 의미하며 숫자가 없는 기본 type(Int, UInt)은 사용자의 컴퓨터 환경에 따라 달라진다. 예를 들어 64bit 컴퓨터를 사용할 경우 Int = Int64이고 32bit 컴퓨터를 사용할 경우 Int = Int32가 된다. 사용한 type의 크기보다 작거나 큰 값을 넣어주면 overflow문제가 발생하니 주의해야 한다!
Int와 UInt의 차이를 알기 위해서는 bit개념을 이해해야 하는데, 기본적으로 컴퓨터는 0과 1의 값을 사용하고 그 값을 저장하는 공간의 단위가 bit이다. 즉 1bit란 0과 1 둘 중 하나가 들어갈 수 있는 방의 이름이라고 생각하면 될 것 같다. 8bits를 1byte라고 하고 컴퓨터는 이런 단위를 기본으로 데이터를 저장하고 처리한다. 컴퓨터가 0과 1만 사용하기 때문에 기본적으로 이진수를 사용한다. (숫자 10 = 이진법 110(2), 숫자 114 = 이진법 1110010(2))
예를 들어 Int8은 8bit를 사용하는 정수타입이다(bit 8개를 숫자를 저장할 때 사용한다는 의미, 00000000~11111111), 그러나 8개 중 하나의 bit는 부호를 저장하기 위해 사용하므로 실제 저장 가능한 bit는 7개이다. 즉 Int8이 나타낼 수 있는 수의 범위는 - 128(2^7) ~ 127(2^7 - 1)이 된다. 최댓값에서 1을 빼주는 이유는 0 값을 저장하기 위함이다.
UInt는 unsigned integer의 약자이며 이는 무부호 정수형이라는 뜻이다. 즉 부호로 사용하는 bit를 숫자에 사용하고, 양수만을 사용하겠다는 뜻이다. 즉 UInt8의 경우는 8개의 bits를 모두 숫자를 저장하기 위해 사용 가능하므로 0 ~ 255(2^8 - 1)의 범위를 가진다.
1) 정수형: Int의 선언과 최대 최소
var num1: Int
print("Int :", Int.min, "~", Int.max, "(2^63 - 1)")
var num2: Int8
print("Int8 :", Int8.min, "~", Int8.max, "(2^7 - 1)")
var num3: Int16
print("Int16 :", Int16.min, "~", Int16.max, "(2^15 - 1)")
var num4: Int32
print("Int32 :", Int32.min, "~", Int32.max, "(2^31 - 1)")
var num5: Int64
print("Int64 :", Int64.min, "~", Int64.max, "(2^63 - 1)", terminator: "\n\n")
Int : -9223372036854775808 ~ 9223372036854775807 (2^63 - 1)
Int8 : -128 ~ 127 (2^7 - 1)
Int16 : -32768 ~ 32767 (2^15 - 1)
Int32 : -2147483648 ~ 2147483647 (2^31 - 1)
Int64 : -9223372036854775808 ~ 9223372036854775807 (2^63 - 1)
2) 정수형: UInt의 선언과 최대 최소
var num6: UInt
print("UInt :", UInt.min, "~", UInt.max, "(2^64 - 1)")
var num7: UInt8
print("UInt8 :", UInt8.min, "~", UInt8.max, "(2^8 - 1)")
var num8: UInt16
print("UInt16 :", UInt16.min, "~", UInt16.max, "(2^16 - 1)")
var num9: UInt32
print("UInt32 :", UInt32.min, "~", UInt32.max, "(2^32 - 1)")
var num10: UInt64
print("UInt64 :", UInt64.min, "~", UInt64.max, "(2^64 - 1)")
UInt : 0 ~ 18446744073709551615 (2^64 - 1)
UInt8 : 0 ~ 255 (2^8 - 1)
UInt16 : 0 ~ 65535 (2^16 - 1)
UInt32 : 0 ~ 4294967295 (2^32 - 1)
UInt64 : 0 ~ 18446744073709551615 (2^64 - 1)
3) 실수형 Float와 Double의 선언과 최대 최소
실수형의 경우 최대 최소는 여러 형태로 정의할 수 있는데, 본 예제에서는 leastNormalMagnitued와 greatestFiniteMagnitude를 사용하였다. 기억할 때는 소수점 몇자리까지 사용가능한지로 기억하는 것이 좋을 것 같다. 특별히 더 큰 숫자를 위해 80bit의 Float80이 정의 되어있고 이보다도 더 큰 값을 저장해야 할때는 자신이 type을 만들거나, 더 큰 값을 위한 라이브러리를 불러 사용해야 한다.
var num11: Float // 소수점 6자리 까지(=Float)
print("Float :", Float.leastNormalMagnitude, "~", Float.greatestFiniteMagnitude)
var num12: Float32 // 소수점 6자리 까지(=Float32)
print("Float32 :", Float32.leastNormalMagnitude, "~", Float32.greatestFiniteMagnitude)
var num13: Float64 // 소수점 15자리 까지(=Double)
print("Float64 :", Float64.leastNormalMagnitude, "~", Float64.greatestFiniteMagnitude)
var num14: Float80 // 더 큰 숫자를 위한 확장 type(80bit!)
print("Float80 :", Float80.leastNormalMagnitude, "~", Float80.greatestFiniteMagnitude)
var num15: Double // 소수점 15자리 까지(=Float64)
print("Double :", Double.leastNormalMagnitude, "~", Double.greatestFiniteMagnitude)
Float : 1.1754944e-38 ~ 3.4028235e+38
Float32 : 1.1754944e-38 ~ 3.4028235e+38
Float64 : 2.2250738585072014e-308 ~ 1.7976931348623157e+308
Float80 : 3.3621031431120935063e-4932 ~ 1.189731495357231765e+4932
Double : 2.2250738585072014e-308 ~ 1.7976931348623157e+308
여러 형태로 값을 선언하기 위해서는 숫자 앞에 문자를 추가해서 컴퓨터에게 사용하고자 하는 숫자의 형태를 알려준다. 기본적으로는 10진수로 사용되고 2진수의 경우 숫자 앞에 '0b', 8진수의 경우 숫자 앞에 '0o', 16진수의 경우 숫자 앞에 '0x'를 붙여준다. 실수형의 경우 숫자 뒤에 문자를 붙여 배수를 표현하는데 e1은 10^1을 의미하여 16진수의 경우는 p1은 2^1을 의미한다.(ex, 10^4 = e4, 2^15 = p15)
print("정수형")
let decimalInt = 66 // 10진수
print(decimalInt)
let binaryInt = 0b1000010 // 2진수
print(binaryInt)
let octalInt = 0o102 // 8진수
print(octalInt)
let hexadecimalInt = 0x42 // 16진수
print(hexadecimalInt, terminator : "\n\n")
print("실수형")
let deciDouble = 66.66
print(deciDouble)
let expDouble = 6.666e1 // 6.666 * 10^1
print(expDouble)
let hexDouble = 0x21.548p1 // 33.330078 * 2^1
print(hexDouble)
정수형
66
66
66
66
실수형
66.66
66.66
66.66015625
그 밖에 알아두면 좋은 것으로, swift에서는 개발자가 헷갈리지 않기 위해 숫자 앞에 0을 표기하거나, 자릿수를 끊어 보기 위해 '_'기호 사용을 허용한다.
let num16 = 00066.66
print(num16)
let num17 = 6_060_000
print(num17)
let num18 = 6_000.000_000_000_6
print(num18)
66.66
6060000
6000.0000000006
*해당 블로그의 포스트는 공부하는 과정 중 공부한 내용을 기록한 것으로 내용이 완벽하지 않을 수 있습니다. 잘못된 내용이나 추가적인 내용이 있다면 댓글로 알려주시면 감사하겠습니다.
'Swift > Basic' 카테고리의 다른 글
[Swift] 02.Variables and Constants(변수와 상수) (0) | 2021.01.26 |
---|---|
[Swift] 01.Print() (2) | 2021.01.24 |