# Kotlin: Number Type and Range

I summarized Kotlin basic number types and their range. In Kotlin, we can use Byte, Short, Int, Long, and UByte, UShort, UInt, ULong.

## Size in Memory

Here, bit width and byte width for each number type.

Number type and bit and byte width
Type ビット数 バイト数
Byte, UByte 8 1
Short, UShort 16 2
Int, UInt 32 4
Long, ULong 64 8
Float 32 4
Double 64 8

## Value Range

Here is the ranges of their values.

Number type and range
Type Min Max
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

Zeal number can take 2(bit width) numbers. Float, Double are calculated as below.

### Float, Double Expression in Memory

Float, Double is separated into 3 part, sign part, exponent part, and fraction part in memory. The bit width of them are as follows.

Sign Exponent Fraction 1 8 23 11 54

The value is expressed with the 3 values. Exponent value can be less than 0.

Now, denote the 3 parts as follows.

$$s$$ Sign part value (0 or 1) Bit width of exponent part (8 for Float, 11 for Double) Exponent value in binary expression (from 0 to $$2^{e_b} – 1$$) Bit width of fraction part (23 for Float, 54 for Double) Fraction value in binary expression (from 0 to $$2^{f_b} – 1$$)

Then, the value of Float or Double can be written as follows.

$(-1)^s \times 2 ^ { e – 2 ^ { e_b – 1 } } \times \left( 1 + \frac{f}{2^ {\left( f_b + 1 \right)} } \right)$

The value is the maximum when $$s=0,e=2^{e_b}-1,f=2^{f_b}-1$$.

Here are some examples of sign, exponent and fraction parts in Float.

Sign
Exponent
Fraction
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

You can easily see binary expression of the value with toBits method, which I introduced in Kotlin 1.2 New Feature.