Байты и диапазон числа в Kotlin
Давайте теперь посмотрим, как из байтов получается диапазон числа.
Самая мелкая клетка памяти - бит. В бите только
два состояния: 0 или 1. Восемь бит
составляют один байт.
Каждый новый бит удваивает количество разных чисел.
Начинаем с единицы и удваиваем восемь раз: 2,
4, 8, 16, 32, 64,
128, 256. В одном байте помещается
256 разных чисел.
Если знак не нужен, все 256 чисел идут от нуля
вверх. Ноль тоже занимает одно значение, поэтому
последнее число на единицу меньше 256.
Диапазон получается от 0 до 255.
Если знак нужен, те же 256 чисел делят между
минусом и плюсом. На отрицательные отдают половину,
128 значений: от -128 до -1.
Вторая половина - это ноль и положительные числа
от 1 до 127. Диапазон получается
от -128 до 127.
Два байта - это 16 бит. Первые восемь мы уже
посчитали, это 256. Вторые восемь умножают
результат еще на 256, получается 65536
разных чисел. Без знака они идут от 0 до
65535. Со знаком половина, 32768 чисел,
уходит в минус: от -32768 до -1.
Ноль и плюс занимают значения от 0 до
32767.
Тот же прием работает и для больших размеров: каждые
новые 8 бит умножают число вариантов на
256. Четыре байта - это 32 бита и
4294967296 разных чисел. Восемь байт -
64 бита, вариантов еще в 256 раз
больше.
Сведем типичные размеры целого числа в таблицу:
| Размер | Бит | Без знака | Со знаком |
|---|---|---|---|
1 байт
|
8
|
от 0 до 255
|
от -128 до 127
|
2 байта
|
16
|
от 0 до 65535
|
от -32768 до 32767
|
4 байта
|
32
|
от 0 до 4294967295
|
от -2147483648 до 2147483647
|
8 байт
|
64
|
от 0 до 18446744073709551615
|
от -9223372036854775808 до 9223372036854775807
|
Дробное число тоже занимает фиксированное число байт.
Вариантов в этих битах конечное количество, и не каждая
обычная дробь в них попадает точно. Дробь 1/3
в десятичной записи не кончается: за нулем идут
тройки без конца. В битах так же не кончается,
например, 0.1.
В отведенные байты попадает близкое значение,
поэтому дробное часто хранится приблизительно.
В Kotlin для чисел есть разные типы. Они занимают разное количество байт, и диапазон у них поэтому разный. Дальше в уроках будем разбирать эти типы.
Сколько бит в одном байте?
Сколько разных чисел помещается в один байт?
Число занимает 1 байт и не хранит знак.
Какой диапазон оно может хранить?
Число занимает 1 байт и хранит знак.
Какой диапазон оно может хранить?
Сколько бит в двух байтах?
Сколько разных чисел помещается в два байта?
Число занимает 2 байта и не хранит знак.
Какой диапазон оно может хранить?
Число занимает 2 байта и хранит знак.
Какой диапазон оно может хранить?
Сводная таблица диапазонов по размеру:
| Размер | Бит | Без знака | Со знаком |
|---|---|---|---|
1 байт
|
8
|
от 0 до 255
|
от -128 до 127
|
2 байта
|
16
|
от 0 до 65535
|
от -32768 до 32767
|
4 байта
|
32
|
от 0 до 4294967295
|
от -2147483648 до 2147483647
|
8 байт
|
64
|
от 0 до 18446744073709551615
|
от -9223372036854775808 до 9223372036854775807
|