Swift

진수 변환

GREEN.1229 2021. 5. 27. 11:29

안녕하세요. 그린입니다🟢

이번 포스팅에서는 Swift에서 진수 변환하는 방법에 대해 학습하겠습니다🧑🏻‍💻

진수란?

얼만큼의 수를 증가시킨 후 자릿수를 올릴 것인지에 대한 단위를 말합니다.

즉, 2진수는 2개의 수를 사용하고 8진수는 8개의 16진수는 16개의 수를 사용합니다.

잘 알고 계시겠지만 기본적으로 실생활에서는 10진수 즉 10개의 0~9까지의 수를 사용하여 나타냅니다.

그렇다면, 각 진수 표현이 다른데 왜 알아야 할까요?

특히 2진수는 컴퓨터가 나타낼 수 있는 수의 범위로 2진수를 10진수로 10진수를 2진수로 변환하는 방법과 이해하는것이 중요합니다.

대표적으로 가장 많이 사용되는 2진수, 8진수, 10진수, 16진수에 대해 알아보고 각 변환하는 방법에 대해 알아봅시다!

// MARK: - 진수 변환
import Foundation

let decimal: Int = 29
let binary: String = "10011"
let octal: String = "234"
let hexa: String = "ab1"

// 10진수 -> 2진수
let binaryFromDecimal: String = String(decimal, radix: 2)
print(binaryFromDecimal) // 11101

// 2진수 -> 10진수
let decimalFromBinary: Int = Int(binary, radix: 2)!
print(decimalFromBinary) // 19

// 10진수 -> 8진수
let octalFromDecimal: String = String(decimal, radix: 8)
print(octalFromDecimal) // 35

// 8진수 -> 10진수
let decimalFromOctal: Int = Int(octal, radix: 8)!
print(decimalFromOctal) // 156

// 10진수 -> 16진수
let hexaFromDecimal: String = String(decimal, radix: 16)
print(hexaFromDecimal) // 1d

// 16진수 -> 10진수
let decimalFromHexa: Int = Int(hexa, radix: 16)!
print(decimalFromHexa) // 2737

// 2진수 -> 8진수
let octalFromBinary: String = String(Int(binary, radix: 2)!, radix: 8)
print(octalFromBinary) // 23

// 8진수 -> 2진수
let binaryFromOctal: String = String(Int(octal, radix: 8)!, radix: 2)
print(binaryFromOctal) // 10011100

위와 같이 radix로 해당 진수를 변환해 줄 수 있습니다.

진수 변환 시 주의점

1. 10진수는 Int형, 나머지 진수들은 String형으로 표현됨으로 각 변환 시 주의가 필요합니다.

2. 다른진수를 10진수로 변환할때 강제추출이나 옵셔널로 선언해줘야하는데, 그 이유는 나머지 진수는 String형으로 어떤것이든 표현할 수 있지만, 10진수는 Int형으로 해당 숫자가 아닌 16진수의 a,b같은 문자가 오게되면 컴파일 에러가 발생합니다. 이에 꼭 옵셔널 바인딩 혹은 강제추출을 통해 표현해줘야합니다.

3. 10진수외 다른 진수끼리 변환 방법시에는 10진수를 꼭 거쳐 변환하여 표현해야합니다.