# 数値型

Swiftでは、数値を表すためにInt型、UInt型、Float型、Double型が提供されています。

# Int型

Swiftで整数を表す型は、Int型を使用することができます。 各プラットフォームによって、Int型のビット数は変わります。32ビットプラットフォームなら32ビット、64ビットプラットフォームなら64ビットで定義されます。

また、固定ビット数の整数型も用意されています。

各ビット数の定義できる整数の最小値と最大値は以下になります。

最小値 最大値
Int8 -128 127
Int16 -32,768 32,767
Int32 -2,147,483,648 2,147,483,647
Int64 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

最小値と最大値は minmax プロパティを参照すると取得することができます。

let min = Int32.min // -2147483648
let max = Int32.max // 2147483647

# UInt型

整数型のInt型は負の整数も表現することができますが、UInt型はマイナス値を含まない0以上の整数を表します。

Int型同様に、32ビットプラットフォームなら32ビット、64ビットプラットフォームなら64ビットで定義されます。

固定ビット数の型も用意されています。

最小値 最大値
UInt8 0 255
UInt16 0 65,535
UInt32 0 4,294,967,295
UInt64 0 18,446,744,073,709,551,615

同様に、最小値と最大値は minmax プロパティを参照すると取得することができます。

let min = UInt32.min // 0
let max = UInt32.max // 4294967295

TIP

Swiftでは、格納される値が負の数にならないとわかっていたとしてもInt型を使うことを推奨しています。整数値にInt型を一貫して使用することで、型変換の必要性がなくなります。また、型の推論にマッチすることができるので、コードの相互運用性を高めることができます。

# Float型とDouble型

Swiftで浮動小数点を表す型は、Float型とDouble型を使用することができます。

Float型とDouble型は表現できる値の範囲が異なり、Float型は10の38乗まで、Double型は10の308乗までの正負を表すことができます。

表現できる値の数値が違うということは、計算の精度にも影響します。一般的な計算では、Float型で事が足りるかもしれませんが、より高度な計算になるとDouble型を指定する必要があります。

型を指定しないで代入すると、デフォルトの型推論はDouble型になります。

let a = 1.11 // Double

# 型の変換

Swiftは、同じ数値であっても型が異なる場合は計算や比較などはできません。

Int32型にInt型を代入しようとすると、コンパイラはエラーを出力します。

let a: Int = 123456
let b: Int32 = a

/* 実行結果 */
// cannot convert value of type 'Int' to specified type 'Int32'
// let B: Int32 = a
//               ^
//               Int32( )

上記の代入をしたい場合は、イニシャライザ を使用して型を変換させる必要があります。

TIP

Swiftでは、型変換させるときはイニシャライザを使用します。 イニシャライザとは、指定した型で値を初期化させる事です。 型名() で実行すると、与えられた値で初期化した値を返してくれます。 型変換のときに使用しますが、正確には新たに型を生成しているだけになります。

let a: Int = 123456
let b: Int32 = Int32(a) // 123456

型を変換したときに、生成した型に合わせて端数の処理が行われるので注意してください。

例えば、次の変数 float1.8 という値をもっていますが、Float型からInt型へ変換したので、1 が返されます。

let float: Float = 1.8
let int: Int = Int(float) // 1

# 計算

数値型の計算は、足し算、引き算、掛け算、割り算などの四則計算と余り計算ができます。

// 足し算
let a = 1 + 1 // 2

// 引き算
let b = 2 - 1 // 1

// 掛け算
let c = 2 * 2 // 4

// 割り算
let d = 4 / 2 // 2

// 余り計算
let e = 10 % 3 // 1

# 比較

数値同士の大小関係を表すのに、比較演算子を使用する事ができます。

比較演算子の種類は以下になります。

演算子 trueになる条件
== 左辺と右辺が一致したとき
!= 左辺と右辺が一致しないとき
> 左辺が右辺より大きいとき
>= 左辺が右辺以上のとき
< 左辺が右辺より小さいとき
<= 左辺が右辺以下のとき
// 左辺と右辺が一致したとき
1 == 1 // true

// 左辺と右辺が一致しないとき
1 != 2 // false

// 左辺が右辺より大きいとき
2 > 1 // true

// 左辺が右辺以上のとき
1 >= 1 // true
2 >= 1 // true

// 左辺が右辺より小さいとき
1 < 2 // true

// 左辺が右辺以下のとき
1 < 2 // true
1 <= 1 // true

また、型の変換 で説明したように、型が異なる場合はコンパイラはエラーを出力します。

let a: Int = 1
let b: Float = 1.0

let c = a == b

/* 実行結果 */
// error: binary operator '==' cannot be applied to operands of type 'Int' and 'Float'
// a == b
// ~ ^  ~
//      Int( )
// note: expected an argument list of type '(Int, Int)'
// a == b

異なる型を比較をする場合は、イニシャライザ Int() を使用してください。

let a: Int = 1
let b: Float = 1.0

let c = a == Int(b)

Float型をInt型へ変換したので式を実行することができます。