Int, UInt8 또는 UInt16. 스위프트, 혼란스러워.

이들 사이에는 차이점이 있습니다. 이 기사를 열거하십시오.

Unsplash에 Franck V.의 사진

난이도 : 초급 | 쉬운 | 정상 | 도전적인

IntegerSwift 의 다른 유형은 매우 혼란 스러울 수 있습니다. 이 기사는 차이점에 대해 궁금한 사람들을 돕기위한 것입니다. 이러한 유형에 대해 자세히 알아보십시오.

전제 조건 :

  • Swift Playgrounds에서 코딩하기 ( 여기 가이드 )
  • 2의 보수 ( 여기 가이드 )

데이터 유형 : 처리 할 수있는 데이터 유형의 표현 (예 : 정수 또는 문자열)입니다.

Int : 부호있는 정수 유형

Int8 : 8 비트 부호없는 정수 유형

Int16 : 16 비트 부호없는 정수 유형

Int32 : 32 비트 부호없는 정수 유형

Int64 : 64 비트 부호없는 정수 유형

정수 : 소수점 이하 자릿수가없는 소수 부분이없는 숫자

NSData : 메모리의 정적 바이트 버퍼

2의 보수 : 2 ^ n에 대한 이진수의 보수

UInt : 부호있는 정수 유형

UInt8 : 부호있는 8 비트 정수 유형

UInt16 : 16 비트 부호있는 정수 유형

UInt32 : 부호있는 32 비트 정수 유형

UInt64 : 부호있는 64 비트 정수 유형

자극

IntegerSwift에는 signed 또는 unsigned 처리 여부에 따라 많은 유형 이 있습니다 Integers. 이것이 의미하는 바는 무엇이며, 개발자로서 이들 간의 차이점을 고려해야하는 이유는 무엇입니까?

4 바이트 또는 8 바이트의 정수

Integer 유형은 일반적으로 4 바이트의 정보를 사용하여 숫자를 저장하지만 그럴 필요는 없으며 일반적으로 사용중인 컴퓨터에 따라 다릅니다.

Swift는 이것과 다르지 않습니다.

즉, Swift Int에서는 32 비트 플랫폼에서 실제로 Int32로 표시되는 반면 64 비트 플랫폼에서는 Int64로 표시되는 부호있는 값 유형입니다.

그래서 우리는이 메모를

노트 :

  • 32 비트 플랫폼에서 Int다음과 같은 크기입니다.Int32
  • 64 비트 플랫폼에서 Int다음과 같은 크기입니다.Int64

var minInt = Int.min // -9223372036854775808 
var maxInt = Int.max // 9223372036854775807

부호있는 정수는 Swift에서 Two 's Complement 를 사용하여 저장되며 이는 첫 번째 숫자가 숫자가 양수인지 음수인지를 선언 함을 의미합니다.

Int8에 저장된 가장 작은 음수 (즉, Int8.min)는 -128이고 가장 큰 음수 (즉, Int8.max)는 127입니다.

이것은 첫 번째 숫자가 부호로 예약되었지만 (기억 : Signed Integers) 때문입니다.

가장 큰 숫자는 8 비트로 표시됩니다.

이것은 127을 나타냅니다. Swift에서 다음 줄을 실행하여 이것을 확신 할 수 있습니다. 그러나 Swift는 이진수에서 선행 0을 제거합니다 (데 너리 숫자와 마찬가지로).

let largestNumber = (String(UInt8(bitPattern: Int8.max), radix: 2)) // "1111111"

let smallestNumber = (String(UInt8(bitPattern: Int8.min), radix: 2)) // "1000000"

Swift는 그것이 긍정적이라고 생각합니다!

let signedInt: Int8 = 0
let zeroNumber = (String(UInt8(bitPattern: signedInt), radix: 2)) // "0"

최대 수? 15 1 (접두사 0)

최소 수? 1 다음에 15 0이옵니다 (이는 여전히 2의 보수입니다).

비트 수가 많은 정수 의 경우에도 마찬가지입니다 .

Swift의 부호없는 정수

음수를 고려할 필요가 없기 때문에 숫자를 저장할 공간 이 더 많다는 점을 고려해야합니다.

즉, unsigned Integers는 음수를 고려하지 않습니다.

다시 Integers한 번 UInt사용중인 컴퓨터 에 따라 달라집니다.

노트 :

  • 32 비트 플랫폼에서 UInt다음과 같은 크기입니다.UInt32
  • 64 비트 플랫폼에서 UInt다음과 같은 크기입니다.UInt64

이전과 마찬가지로 모든 .NET Framework에 저장할 수있는 가장 큰 숫자와 가장 작은 숫자를 계산할 수 있습니다 UInt. 여기서 우리는 UInt8예제를 보여줄 것 입니다. 이제 저장할 수있는 가장 작은 숫자는 양수 UInt만 저장할 수 있으므로 여전히 양수입니다.

var minUInt8 = UInt8.min // 0
var maxUInt8 = UInt8.max // 255

let smallestUIntNumber = (String(UInt8(bitPattern: Int8(UInt8.min)), radix: 2)) // 0

똑같이 가장 큰 숫자

let largestUIntNumber = (String(UInt8(bitPattern: Int8(UInt8.max)), radix: 2))

Swift에서 정수 유형 변환

우리는 Swift에서 이러한 Integer 유형을 변환 할 수 있으며 매우 고통스럽지 않습니다. 뛰어 들자!

var someInt: Int = 7 // init an Int
var someUInt: UInt = UInt(someInt) // Cast Int from UInt
var someNewUInt: UInt = 10 // init a UInt
var someInt: Int = Int(someNewUInt) // Cast from UInt to Int

컴패니언 기사와 함께 (약 Two’s complement방법을 통해 회담) Integers스위프트에 저장되어, 그들 사이에도 어떻게 기계 당신이 사용의 의미를 변경할 수의 차이 Int또는 UInt스위프트에 있습니다.

지식 확장

  • Apple은 여기 에 Int 서비스에 대한 문서를 만들었습니다.

질문 있어요? 여기 에서 나와 연락 할 수 있습니다.

Suggested posts

Python Datetime 모듈에서 반드시 알아야 할 4 가지 객체

포괄적 인 실용적인 가이드

Python Datetime 모듈에서 반드시 알아야 할 4 가지 객체

시간은 많은 데이터 과학 관련 작업에서 중요한 기능입니다. 예를 들어, 일일 판매 및 재고 정보는 소매 분석에 매우 중요합니다.

N + 1 문제 선택

모든 것은 비용이 있습니다.

N + 1 문제 선택

개발자의 경우 ORM (Object-relational mapping)을 사용하면 삶을 상당히 단순화 할 수 있지만 알아야 할 자체 캐치 세트가 있습니다. 더 심각한 문제 중 하나는 Select N + 1 문제입니다.