Table of Contents
Kotlin で使える基本の数値型の範囲についてまとめました。 Kotlin では数値型として Byte, Short, Int, Long が使えます。 それに加えて UByte, UShort, UInt, ULong も使えます。
メモリ上のサイズ
プログラム内で使用するビット・バイト数は次の通りです。
| 型 | ビット数 | バイト数 |
|---|---|---|
| Byte, UByte | 8 | 1 |
| Short, UShort | 16 | 2 |
| Int, UInt | 32 | 4 |
| Long, ULong | 64 | 8 |
| Float | 32 | 4 |
| Double | 64 | 8 |
値の範囲
そして、これらの型が取りうる値の範囲は次の通りです。
| 型 | 最小値 | 最大値 |
|---|---|---|
Byte |
– 27 | 27 – 1 |
| – 128 | 127 | |
UByte |
0 | 28 – 1 |
| 255 | ||
Short |
– 215 | 215 – 1 |
| – 32768 | 32767 | |
UShort |
0 | 216 – 1 |
| 65535 | ||
Int |
– 231 | 231 – 1 |
| – 2147483648 | 2147483647 | |
UInt |
0 | 232 – 1 |
| 4294967295 | ||
Long |
– 263 | 263 – 1 |
| -9223372036854775808 | 9223372036854775807 | |
ULong |
0 | 264 – 1 |
| 18446744073709551615 | ||
Float |
– 3.4028235 x 1038 | 3.4028235 x 1038 |
Double |
– 1.7976931348623157 x 10308 | 1.7976931348623157 x 10308 |
整数型は ( 2 ^ textrm{ビット数} ) の数だけ値を取ることができます。 Float, Double はそれぞれ次のように計算されます。
Float, Double のメモリ内の表現方法
Float, Double はメモリ内では符号部(sign)、指数部(exponent)、仮数部(fraction)に別れて表現されており、それぞれのビット数は次のようになっています。
| 符号部 | 指数部 | 仮数部 | |
|---|---|---|---|
Float |
1 | 8 | 23 |
Double |
11 | 54 |
これらの符号部、指数部、仮数部を用いて表現されるのですが、指数部はマイナスの値も取りうるということに注意してください。
符号部, 指数部, 仮数部について次のように記号を定めます。
| (s) | 2進数で表現したときの符号部の値 (0 または 1) |
|---|---|
| (e_b) | 指数部のビット数 (Float なら 8, Double なら 11) |
| (e) | 2進数で表現したときの0から始まる指数部の値 (0以上 ((2^{e_b} – 1))以下) |
| (f_b) | 仮数部のビット数 (Float なら 23, Double なら 54) |
| (f) | 2進数で表現したときの0から始まる仮数部の値 (0以上 ((2^{f_b} – 1))以下) |
このようにすると、 Float, Double の値は次のように表現されます。
(s=0,e=2^{e_b}-1,f=2^{f_b}-1)のときに最大値になります。
Float での、符号部、指数部、仮数部の値の例を紹介します。
| 値 | 符号部 |
|---|---|
| 指数部 | |
| 仮数部 | |
| 0.125 | 0 |
| 01111100 | |
| 00000000000000000000000 | |
| 0.25 | 0 |
| 01111101 | |
| 00000000000000000000000 | |
| 0.5 | 0 |
| 01111110 | |
| 00000000000000000000000 | |
| 1 | 0 |
| 01111111 | |
| 00000000000000000000000 | |
| 2 | 0 |
| 10000000 | |
| 00000000000000000000000 | |
| 3 | 0 |
| 10000000 | |
| 10000000000000000000000 | |
| 4 | 0 |
| 10000001 | |
| 00000000000000000000000 | |
| 5 | 0 |
| 10000001 | |
| 01000000000000000000000 | |
| 6 | 0 |
| 10000001 | |
| 10000000000000000000000 |
Kotlin 1.2 の新機能 で紹介している toBits メソッド を使うと、 数値をビット列に簡単に変換できます。





