Как степень двойки связанна с размером переменных

Минимальная единица измерения объема памяти в двоичных компьютерных системах называется БИТ (BIT).

Бит это двоичное число, которое, как правило принимает либо 0 либо 1. Если говорить о конечном проявлении в физической форме в компьютере, то как правило это состояния "свободно", "занято" или "нет сигнала" и "есть сигнал". Вот именно от сюда проявляется важность двойки и ее степенней.

Так как бит это очень уж маленькая единица измерения даже для переменных, не говоря уже о подсчете информации на энергонезависимых источниках памяти (жесткие диски, флешки).
Ввели дополнительную единицу измерения называемую БАЙТ (BYTE).

В современных компьютерных системах 1 байт равен 8 битам.
Ранее существовали байты с большей размерностью битов.
Байт обычно является минимальным размером в адресации оперативной памяти, то есть компьютер орудует такими блоками из восьми бит. Путем добавления приставок СИ к байту мы и получаем привычные килобайты, мегабайты и так далее.

Любые переменные используемые в ваших программах занимают сколько то места в оперативной памяти. Место это измеряется уже в байтах.

Посмотрим сколько значений может хранить один байт, для этого возведем 2^8 получаем 256 уникальных значений может хранить один байт.
Почему возводим 2 в степень 8. Потому что у нас имеется восемь элементов, которые могут хранить одно из двух значений, получаем 256 возможных комбинаций от 00000000 до 11111111.

Возьмем ключевые значения двойки, которые соответствуют последовательности байтов.
1 байт = 2^8 = 256
2 байта = 2^16 = 65536
4 байта = 2^32 = 4294967296

К примеру тип данных INTEGER часто реализуется используя 2 байта или 4 байта (а бывает и даже один), то есть теоритически может принимать 65536 или 4294967296 уникальных значений.
На практике всегда стоит помнить, что если тип данных имеет знак, то для него отводится один бит. К примеру пусть у нас тип данных TinyINT (маленький INT, используется в субд MySql) будет знаковым, тогда мы получаем 2^7 = 128, так как у нас есть знак, то интервал допустимых значений будет от -128 до 127 (незабываем про 0).

Если же наш TinyINT является беззнаковым (unsigned), то мы получаем интервал значений от 0 до 255.

Для хранения натурального числа N нужно LOG 2 N + 1 бит. То есть логарифм N по основанию 2 плюс 1 бит.

Со строками дело обстоит несколько иначе.
Так как строка это последовательность символов, а символ может быть любой буквой, цифрой или знаком (в том числе пробелом), то каждый символ кодируется отдельно от одного до нескольких байтов.


comments powered by Disqus