ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 진수 변환
    Swift 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진수를 꼭 거쳐 변환하여 표현해야합니다.

    'Swift' 카테고리의 다른 글

    Safe Array  (0) 2021.07.24
    ReactorKit으로 계산기 구현하기  (0) 2021.07.05
    Deep copy & Shallow copy  (0) 2021.05.25
    패턴 (식별자, 값 바인딩, 튜플)  (0) 2021.05.19
    와일드카드 패턴  (3) 2021.05.18
Designed by Tistory.