Найти в Дзене
Java медитация

Что такое бинарный код и как измеряется информация

Статья для тех, кто не совсем понимает что такое бинарный код и как измеряется информация. Самые азы, но кому-то неизвестно и это. А кто-то когда-то знал, но успешно забыл. Объясняю простым языком буквально «на пальцах».

Мы все привыкли к десятичной системе счисления, поэтому другие нам кажутся какими-то странными. В десятичной системе 10 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Но процессор компьютера знает всего две цифры — 0 и 1, а система счисления, которую он использует называется двоичной или бинарной (bi на латыни означает «двойное»). По сути, вся информация в компьютерных технологиях представлена в виде бинарного кода. То есть, все закодировано цифрами 0 и 1. Если копнуть ещё глубже, то для процессора вообще не существует цифр в нашем понимании. То, что для нас 0 — для процессора отсутствие электрического сигнала, соответственно 1 — электрический сигнал есть. Но мы для удобства будем говорить 0 и 1.

Как это понять? Давай попробуем посчитать, используя только две цифры 0 и 1:

0, 1, 10, 11, 100, 101, 110, 111

Продолжим дальше:

1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111

А теперь возьмем эти числа из двоичной системы и совместим их с понятными нам. Только зададим всем одинаковую разрядность. То есть, не 0, а 0000. Далее не 1, а 0001. Не 10, а 0010 и т.д.

двоичное число десятичное число

0000 - 0

0001 - 1

0010 - 2

0011 - 3

0100 - 4

0101 - 5

0110 - 6

0111 - 7

1000 - 8

1001 - 9

1010 - 10

Думаю, продолжать не стоит. Понимаешь суть? Это код. Каждому двоичному числу соответствует десятичное. Сначала специально для компьютера, когда передаем ему информацию, мы кодируем наши десятичные числа, а потом при получении ответа наоборот декодируем.

Условно это выглядит так:

нам надо передать процессору пример 3 + 5, чтобы он посчитал. Кодируем, чтобы он нас понял 0011 + 0101 процессор производит вычисление и получает 1000. Декодируем в понятое нам десятичное число 8.

Не будем разбираться как там процессор считает — нам сейчас не важно. Самим что-то кодировать/декодировать тоже не придется. За нас все делает операционная система и специальные программы.

Погнали дальше. Какую самую наименьшую информацию мы можем передать компьютеру? Наверное ты уже догадался: либо цифру 0, либо цифру 1. Такое количество информации называется — бит.

Те двоичные числа, которые мы написали выше и свели в небольшую импровизированную табличку сколько бит памяти занимают? Все верно - 4 бит. Почему? Потому что у каждого из них 4 разряда (0000, 0001, 0010 и т.д.). Как уже говорилось выше, бит может содержать либо 0, либо 1. А сколько бит памяти занимает двоичное число 0010 1001 (кстати, если декодировать в десятичную систему - это число 41). Всё верно - 8 бит, потому что у него 8 разрядов. Видишь, как просто.

Кстати 8 бит — это 1 байт. Ещё одна единица измерения информации. Дальше следуют килобайт, мегабайт, гигабайт, терабайт…

  • 8 бит = 1 байт
  • 1024 байт = 1 килобайт
  • 1024 килобайт = 1 мегабайт
  • 1024 мегабайт = 1 гигабайт
  • 1024 гигабайт = 1 терабайт

И последнее о чем стоит сказать. Если мы возьмем 1 бит, какой диапазон значений в него поместится? Как уже говорилось неоднократно: либо 0, либо 1, а это значит, что диапазон значений равен 2.

Теперь возьмем 2 бита и получим диапазон значений: 00, 01, 10, 11 — 4 значения.

3 бита: 000, 001, 010, 011, 100, 101, 110, 111 — 8 значений.

4 бита: 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111 — 16 значений.

На самом деле все очень просто: 2 возведи в степень количества бит и получишь результат. Какой диапазон значений у байта? 1 байт = 8 бит. Возведем 2 в 8 степень и получим 256.

1 бит — диапазон значений 2^1 = 2

2 бита — диапазон значений 2^2 = 4

3 бита — диапазон значений 2^3 = 8

4 бита — диапазон значений 2^4 = 16

…..

1 байт = 8 бит — диапазон значений 2^8 = 256

…..

4 байта = 32 бит — диапазон значений 2^32 = 4294967296

--------------------------------------------------------------------------------------------------------------------

Стоит сказать о том, что нам вроде не обязательно 0 записывать как 0000 и занимать 4 бита. Правда ведь? Зачем тратить 4 бита, если достаточно 1 бита. Дело тут обстоит вот как. В языках программирования есть различные типы данных, каждому из которых изначально выделено определенное количество памяти. То есть, неважно какое число там будет хранится - занимать оно будет ровно столько памяти, сколько выделено для этого типа данных.

Приведу пример с Java. Там есть такой целочисленный тип, который так и называется - byte (байт). Ну, потому что для него выделено ровно 1 байт (или 8 бит) памяти. Диапазон значений у байта равен 256. Но числа же бывают отрицательными и положительными. Поэтому 256 / 2 = 128. Один байт будем использовать для того, чтобы указать знак - отрицательное число или положительное. В итоге имеем диапазон значений от -128 до 127.

Так вот. Какое бы число из этого диапазона мы не положили в переменную типа byte - занимать оно будет ровно 1 байт. Хоть 0 это, хоть 128, хоть -19.

---------------------------------------------------------------------------------------------------------------------

Вот и все. Каких-то особых сложностей тут нет. Если не понял, прочитай статью еще раз.

Как кодируется графическая, звуковая и видеоинформация здесь разбирать не будем. В основе лежит все тот же двоичный код 0 и 1 для нас и наличие/отсутствие электрического сигнала для процессора.

Если есть вопросы, пиши в комментариях.