目次
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
メソッド を使うと、 数値をビット列に簡単に変換できます。