数字型の設定可能範囲
Type | Min | Max |
---|---|---|
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 |
UInt8 | 0 | 255 |
UInt16 | 0 | 65,535 |
UInt32 | 0 | 4,294,967,295 |
UInt64 | 0 | 18,446,744,073,709,551,615 |
Int32 は、32bitのintと明示的に指定している形。
浮動小数点型は、
float は、有効桁数7桁。
double は、有効桁数15桁。
ObjectiveCで使える便利な整数型
Type | 32bit | 64bit |
---|---|---|
NSInteger | int | long |
CGFloat | float | double |
整数型の場合はNSIntegerを、小数点型の場合はCGFloatを使うと、実行環境によって使用する型を判断してくれる。
32bit環境ではInt32、64bit環境ではInt64のサイズが演算するのに効率が良い (のですよね?)
なので、意識せずに効率のよいサイズを選んでくれるラッパー的な存在という認識。
int, float, doubleの実際のバイト数は後述。
処理系によって変わる対応バイト数
Type | arm7 | arm64 |
---|---|---|
int | 32bit | 32bit |
long | 32bit | 64bit |
float | 32bit | 32bit |
double | 64bit | 64bit |
arm7はiPhone5の32bitのアーキテクチャ。arm64はiPhone5sの64bitのアーキテクチャ。
ビルド時、どのアーキテクチャのバイナリを作るかの指定がある。
NSInteger では、int or long を切り替えてくれるのだが、arm7では実は intとlongは同じ32bit整数型だった。
しかし、arm64の場合、longは64bitになる。
結局以下の様になる感じ?
Type | 32bit/arm7 | 64bit/arm7 | 64bit/arm64 |
---|---|---|---|
NSInteger | 32bit | 32bit | 64bit |
CGFloat | 32bit | 64bit | 64bit |
Swiftの数字型
Type | 32bit | 64bit |
---|---|---|
Int | Int32 | Int64 |
UInt | UInt32 | UInt64 |
Float | 32bit | 32bit |
Double | 64bit | 64bit |
CGFloatの中途半端な型でなくて、FloatとDoubleを用途に合わせてえらんでねという方式なのだと思う。
CGRectのwidthなどCGFloatだったり、NSIntegerなもののやりとりは、castしないとコンパイルエラーになってくれるので、 精度が大丈夫かを考えながらcastしていけばよさそう。