整数を扱うInt型
整数を扱うInt型
符号付き(マイナス値が扱える)整数
符号(+、-)付きの整数を扱いたいときはInt型を使います。
1 2 |
let plusNumber: Int = 123 var minusNumber: Int = -456 |
一般的に、数値を扱いたい時はこのInt型をもっとも多く使いますが、後ろに数字をつけて、値を格納するメモリのビット数(※)を次のように指定することができます。「Int8」「Int16」「Int32」「Int64」
(※)前節の06 コードとメモリの関係を参照
PlayGroundにて、実践で見てみましょう。
[数値を扱う型].max/minで、その型に入る最大値/最小値を得ることができますので、それぞれの型で扱える数値の範囲を確認します。
1 2 3 4 5 6 7 8 9 10 |
var value1_1: Int = Int.max //Intの最大値(9,223,372,036,854,775,807) var value1_2: Int = Int.min //Intの最小値(-9,223,372,036,854,775,808) var value2_1: Int8 = Int8.max //Int8の最大値(127) var value2_2: Int8 = Int8.min //Int8の最小値(-128) var value3_1: Int16 = Int16.max //Int16の最大値(32,767) var value3_2: Int16 = Int16.min //Int16の最小値(-32,768) var value4_1: Int32 = Int32.max //Int32の最大値(2,147,483,647) var value4_2: Int32 = Int32.min //Int32の最小値(-2,147,483,648) var value5_1: Int64 = Int64.max //Int64の最大値(9,223,372,036,854,775,807) var value5_2: Int64 = Int64.min //Int64の最小値(-9,223,372,036,854,775,808) |
これはどういうことかというと、
例えばInt8では8ビット分のメモリ(=8個分のトランジスタ)を確保します。
最初の1ビット分は「+かーかの符号データを格納しておく場所」という取り決めがなされます。
残りの7ビット分は数字用のデータです。7桁の2進数の最大値は1111111=10進数で127となります。
つまり、Int8型の数値の表せる範囲は以下のようになるというわけです。
+: 0〜127
ー: -1〜-128 (マイナス値は0を含まないので、−1から数えて127個分、-128まで表せます)
他も同じ考え方で、Int16なら15桁分の2進数=32,767が最大値、最小値は-32,768となるわけです。
8ビットで1バイトという区切り方をしているので、8の倍数ごとにメモリの範囲が指定できます。
また、Int型の最大値/最小値は実行環境に左右されます。
コンピュータのスペックで、32ビット環境、64ビット環境、という分け方を聞いたことがあるかもしれません。これはメモリの扱える最大値で、Int型はその最大値を使ってデータを格納します。
iPhone 5s以降の端末では、64ビットのデータが扱えるチップが搭載されているため、このような大きなデータが扱えます。それぞれの型の最大値、最小値を確認するコードを入力してみましょう。
なお、Int64を指定しても、32ビット環境では32ビットまでの値しか扱えません。
符号なし(マイナス値が扱えない)整数
符号なし整数には、「UInt」「UInt8」「UInt16」「UInt32」「UInt64」を使用します。
1 2 3 4 5 6 7 8 9 10 |
var value1_1: UInt = UInt.max // UIntの最大値(18,446,744,073,709,551,615) var value1_2: UInt = UInt.min // UIntの最小値(0) var value2_1: UInt8 = UInt8.max // UInt8の最大値(255) var value2_2: UInt8 = UInt8.min // UInt8の最小値(0) var value3_1: UInt16 = UInt16.max // UInt16の最大値(65,535) var value3_2: UInt16 = UInt16.min // UInt16の最小値(0) var value4_1: UInt32 = UInt32.max // UInt32の最大値(4,294,967,295) var value4_2: UInt32 = UInt32.min // UInt32の最小値(0) var value5_1: UInt64 = UInt64.max // UInt64の最大値(18,446,744,073,709,551,615) var value5_2: UInt64 = UInt64.min // UInt64の最小値(0) |
こちらに符号用のトランジスタは無く、指定した数のトランジスタ全てが数字用に使われます。
UInt8型であれば 0〜 8桁の2進数分(=255)まで表せることになります。
メモリ容量を気にせず開発するときは常にIntを使っていて大丈夫ですが、容量を気にして開発しなければいけない時は、状況にあった型を使用するようにしてください。
Int型への変換
Int(変換したいデータ)となります。
ここで、注意して欲しい点があります。
・浮動小数点型(小数点を扱う型)をInt型にしたいとき:数値が丸め込まれます。(例:1.5→1)
・文字列型をInt型にしたいとき:Int(変換したいデータ)!とします。
…この!はアンラップと呼ばれる処理で、SECTION2の03_nilとOptional型に出てきます。
なぜこのような処理が必要かと言うと、文字列は必ずしも整数値にならないからです。(”abc”, "12ab"など)
もし、整数値にならないデータが変換にかけられた場合、nil「何もない」という値が返ってきます。
この「何もない」データを扱うため、自動的に Int(変換したいデータ) はOptional型という特殊な型になります。
このデータを使うために必要な処理がアンラップというわけです。詳しくは該当の節にて解説いたします。