двоичный код это как понять
Значение двоичного кода – почему компьютеры работают с единицами и нулями
Компьютеры не понимают слов и цифр так, как это делают люди. Современное программное обеспечение позволяет конечному пользователю игнорировать это, но на самых низких уровнях ваш компьютер оперирует двоичным электрическим сигналом, который имеет только два состояния: есть ток или нет тока. Чтобы «понять» сложные данные, ваш компьютер должен закодировать их в двоичном формате.
Двоичная система основывается на двух цифрах – 1 и 0, соответствующим состояниям включения и выключения, которые ваш компьютер может понять. Вероятно, вы знакомы с десятичной системой. Она использует десять цифр – от 0 до 9, а затем переходит к следующему порядку, чтобы сформировать двузначные числа, причем цифра из каждого следующего порядка в десять раз больше, чем предыдущая. Двоичная система аналогична, причем каждая цифра в два раза больше, чем предыдущая.
Подсчет в двоичном формате
В двоичном выражении первая цифра равноценна 1 из десятичной системы. Вторая цифра равна 2, третья – 4, четвертая – 8, и так далее – удваивается каждый раз. Добавление всех этих значений даст вам число в десятичном формате.
1111 (в двоичном формате) = 8 + 4 + 2 + 1 = 15 (в десятичной системе)
Учет 0 даёт нам 16 возможных значений для четырех двоичных битов. Переместитесь на 8 бит, и вы получите 256 возможных значений. Это занимает намного больше места для представления, поскольку четыре цифры в десятичной форме дают нам 10000 возможных значений. Конечно, бинарный код занимает больше места, но компьютеры понимают двоичные файлы намного лучше, чем десятичную систему. И для некоторых вещей, таких как логическая обработка, двоичный код лучше десятичного.
Следует сказать, что существует ещё одна базовая система, которая используется в программировании: шестнадцатеричная. Хотя компьютеры не работают в шестнадцатеричном формате, программисты используют её для представления двоичных адресов в удобочитаемом формате при написании кода. Это связано с тем, что две цифры шестнадцатеричного числа могут представлять собой целый байт, то есть заменяют восемь цифр в двоичном формате. Шестнадцатеричная система использует цифры 0-9, а также буквы от A до F, чтобы получить дополнительные шесть цифр.
Почему компьютеры используют двоичные файлы
Короткий ответ: аппаратное обеспечение и законы физики. Каждый символ в вашем компьютере является электрическим сигналом, и в первые дни вычислений измерять электрические сигналы было намного сложнее. Было более разумно различать только «включенное» состояние, представленное отрицательным зарядом, и «выключенное» состояние, представленное положительным зарядом.
Для тех, кто не знает, почему «выключено» представлено положительным зарядом, это связано с тем, что электроны имеют отрицательный заряд, а больше электронов – больше тока с отрицательным зарядом.
Таким образом, ранние компьютеры размером с комнату использовали двоичные файлы для создания своих систем, и хотя они использовали более старое, более громоздкое оборудование, они работали на тех же фундаментальных принципах. Современные компьютеры используют, так называемый, транзистор для выполнения расчетов с двоичным кодом.
Вот схема типичного транзистора:
По сути, он позволяет току течь от источника к стоку, если в воротах есть ток. Это формирует двоичный ключ. Производители могут создавать эти транзисторы невероятно малыми – вплоть до 5 нанометров или размером с две нити ДНК. Это то, как работают современные процессоры, и даже они могут страдать от проблем с различением включенного и выключенного состояния (хотя это связано с их нереальным молекулярным размером, подверженным странностям квантовой механики).
Почему только двоичная система
Поэтому вы можете подумать: «Почему только 0 и 1? Почему бы не добавить ещё одну цифру?». Хотя отчасти это связано с традициями создания компьютеров, вместе с тем, добавление ещё одной цифры означало бы необходимость выделять ещё одно состояние тока, а не только «выключен» или «включен».
Проблема здесь в том, что если вы хотите использовать несколько уровней напряжения, вам нужен способ легко выполнять вычисления с ними, а современное аппаратное обеспечение, способное на это, не жизнеспособно как замена двоичных вычислений. Например, существует, так называемый, тройной компьютер, разработанный в 1950-х годах, но разработка на том и прекратилась. Тернарная логика более эффективна, чем двоичная, но пока ещё нет эффективной замены бинарного транзистора или, по крайней мере, нет транзистора столь же крошечных масштабов, что и двоичные.
Причина, по которой мы не можем использовать тройную логику, сводится к тому, как транзисторы соединяются в компьютере и как они используются для математических вычислений. Транзистор получает информацию на два входа, выполняет операцию и возвращает результат на один выход.
Бинарная таблица истинности, работающая на двоичной логике, будет иметь четыре возможных выхода для каждой фундаментальной операции. Но, поскольку тройные ворота используют три входа, тройная таблица истинности имела бы 9 или более. В то время как бинарная система имеет 16 возможных операторов (2^2^2), троичная система имела бы 19683 (3^3^3). Масштабирование становится проблемой, поскольку, хотя троичность более эффективна, она также экспоненциально более сложна.
Кто знает? В будущем мы вполне возможно увидим тройничные компьютеры, поскольку бинарная логика столкнулась с проблемами миниатюризации. Пока же мир будет продолжать работать в двоичном режиме.
Как читать двоичный (бинарный) код
Если вам интересно узнать, как читать двоичные числа, важно понять, как работают двоичные числа. Двоичная система известна как система нумерации «base 2», что означает наличие двух возможных чисел для каждой цифры; один или ноль. Большие числа записываются путем добавления дополнительных двоичных единиц или нулей.
Понимание двоичных чисел
Знание того, как читать двоичные файлы, не является критичным для использования компьютеров. Но хорошо понять концепцию, чтобы лучше понять, как компьютеры хранят числа в памяти. Он также позволяет понимать такие термины, как 16-битные, 32-битные, 64-битные и измерения памяти, такие как байты (8 бит).
Как читать двоичный код
«Чтение» двоичного кода обычно означает перевод двоичного числа в базовое 10 (десятичное) число, с которым люди знакомы. Это преобразование достаточно просто выполнить в своей голове, когда вы поймете, как работает бинарный язык.
Каждая цифра в двоичном числе имеет определенное значение, если цифра не является нулем. После того как вы определили все эти значения, вы просто складываете их вместе, чтобы получить 10-значное десятичное значение двоичного числа. Чтобы увидеть, как это работает, возьмите двоичное число 11001010.
2. Затем перейдите к следующей цифре. Если это один, то рассчитайте два в степени одного. Запишите это значение. В этом примере значение равно степени два, равной двум.
3. Продолжайте повторять этот процесс, пока не дойдете до самой левой цифры.
4. Чтобы закончить, все, что вам нужно сделать, это сложить все эти числа вместе, чтобы получить общее десятичное значение двоичного числа: 128 + 64 + 0 + 0 + 8 + 0 + 2 + 0 = 202.
Двоичные числа с подписью
Приведенный выше метод работает для базовых двоичных чисел без знака. Однако компьютерам нужен способ представления отрицательных чисел также с помощью двоичного кода.
Из-за этого компьютеры используют двоичные числа со знаком. В системе этого типа самая левая цифра известна как знаковый бит, а остальные цифры известны как биты амплитуды.
Чтение двоичного числа со знаком почти такое же, как и без знака, с одним небольшим отличием.
1. Выполните ту же процедуру, как описано выше для двоичного числа без знака, но остановитесь, как только вы достигнете самого левого бита.
2. Чтобы определить знак, осмотрите крайний левый бит. Если это единица, то число отрицательное. Если это ноль, то число положительное.
4. Бинарный метод со знаком позволяет компьютерам представлять числа, которые являются положительными или отрицательными. Однако он потребляет начальный бит, а это означает, что для больших чисел требуется немного больше памяти, чем для двоичных чисел без знака.
Двоичный код.
Кстати, на нашем сайте вы можете перевести любой текст в десятичный, шестнадцатеричный, двоичный код воспользовавшись Калькулятором кодов онлайн.
Видя что-то впервые, мы зачастую задаемся логичным вопросом о том, как это работает. Любая новая информация воспринимается нами, как что-то сложное или созданное исключительно для разглядываний издали, однако для людей, желающих узнать подробнее о двоичном коде, открывается незамысловатая истина – бинарный код вовсе не сложный для понимания, как нам кажется. К примеру, английская буква T в двоичной системе приобретет такой вид – 01010100, E – 01000101 и буква X – 01011000. Исходя из этого, понимаем, что английское слово TEXT в виде двоичного кода будет выглядеть таким вот образом: 01010100 01000101 01011000 01010100. Компьютер понимает именно такое изложение символов для данного слова, ну а мы предпочитаем видеть его в изложении букв алфавита.
На сегодняшний день двоичный код активно используется в программировании, поскольку работают вычислительные машины именно благодаря ему. Но программирование не свелось до бесконечного набора нулей и единиц. Поскольку это достаточно трудоемкий процесс, были приняты меры для упрощения понимания между компьютером и человеком. Решением проблемы послужило создание языков программирования (бейсик, си++ и т.п.). В итоге программист пишет программу на языке, который он понимает, а потом программа-компилятор переводит все в машинный код, запуская работу компьютера.
Перевод натурального числа десятичной системы счисления в двоичную систему.
Чтобы перевести числа из десятичной системы счисления в двоичную пользуются «алгоритмом замещения», состоящим из такой последовательности действий:
1. Выбираем нужное число и делим его на 2. Если результат деления получился с остатком, то число двоичного кода будет 1, если остатка нет – 0.
2. Откидывая остаток, если он есть, снова делим число, полученное в результате первого деления, на 2. Устанавливаем число двоичной системы в зависимости от наличия остатка.
3. Продолжаем делить, вычисляя число двоичной системы из остатка, до тех пор, пока не дойдем до числа, которое делить нельзя – 0.
4. В этот момент считается, что двоичный код готов.
Для примера переведем в двоичную систему число 7:
1. 7 : 2 = 3.5. Поскольку остаток есть, записываем первым числом двоичного кода 1.
2. 3 : 2 = 1.5. Повторяем процедуру с выбором числа кода между 1 и 0 в зависимости от остатка.
3. 1 : 2 = 0.5. Снова выбираем 1 по тому же принципу.
4. В результате получаем, переведенный из десятичной системы счисления в двоичную, код – 111.
Таким образом можно переводить бесконечное множество чисел. Теперь попробуем сделать наоборот – перевести число из двоичной в десятичную.
Перевод числа двоичной системы в десятичную.
Для этого нам нужно пронумеровать наше двоичное число 111 с конца, начиная нулем. Для 111 это 1^2 1^1 1^0. Исходя из этого, номер для числа послужит его степенем. Далее выполняем действия по формуле: (x * 2^y) + (x * 2^y) + (x * 2^y), где x – порядковое число двоичного кода, а y – степень этого числа. Подставляем наше двоичное число под эту формулу и считаем результат. Получаем: (1 * 2^2) + (1 * 2^1) + (1 * 2^0) = 4 + 2 + 1 = 7.
Немного из истории двоичной системы счисления.
Двоичное счисление на пальцах
Все знают, что компьютеры состоят из единиц и нулей. Но что это значит на самом деле?
Если у вас в школе была информатика, не исключено, что там было упражнение на перевод обычных чисел в двоичную систему и обратно. Маловероятно, что кто-то вам объяснял практический смысл этой процедуры и откуда вообще берётся двоичное счисление. Давайте закроем этот разрыв.
Эта статья не имеет практической ценности — читайте её просто ради интереса к окружающему миру. Если нужны практические статьи, заходите в наш раздел «Где-то баг», там каждая статья — это практически применимый проект.
Отличный план
Чтобы объяснить всё это, нам понадобится несколько тезисов:
Система записи — это шифр
Если у нас есть девять коров, мы можем записать их как 🐄🐄🐄🐄🐄🐄🐄🐄🐄 или как 9 × 🐄.
Почему 9 означает «девять»? И почему вообще есть такое слово? Почему такое количество мы называем этим словом? Вопрос философский, и короткий ответ — нам нужно одинаково называть числа, чтобы друг друга понимать. Слово «девять», цифра 9, а также остальные слова — это шифр, который мы выучили в школе, чтобы друг с другом общаться.
Допустим, к нашему стаду прибиваются еще 🐄🐄🐄. Теперь у нас 🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄 — двенадцать коров, 12. Почему мы знаем, что 12 — это «двенадцать»? Потому что мы договорились так шифровать числа.
Нам очень легко расшифровывать записи типа 12, 1920, 100 500 и т. д. — мы к ним привыкли, мы учили это в школе. Но это шифр. 12 × 🐄 — это не то же самое, что 🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄. Это некая абстракция, которой мы пользуемся, чтобы упростить себе счёт.
Мы привыкли шифровать десятью знаками
У нас есть знаки 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9 — всего десять знаков. Этим числом знаков мы шифруем количество единиц, десятков, сотен, тысяч и так далее.
Мы договорились, что нам важен порядок записи числа. Мы знаем, что самый правый знак в записи означает число единиц, следующий знак (влево) означает число десятков, потом сотен и далее.
Например, перед нами число 19 547. Мы знаем, что в нём есть:
Если приглядеться, то каждый следующий разряд числа показывает следующую степень десятки:
Нам удобно считать степенями десятки, потому что у нас по десять пальцев и мы с раннего детства научились считать до десяти.
Система записи — это условность
Представим бредовую ситуацию: у нас не 10 пальцев, а 6. И в школе нас учили считать не десятками, а шестёрками. И вместо привычных цифр мы бы использовали знаки ØABCDE. Ø — это по-нашему ноль, A — 1, B — 2, E — 5.
Вот как выглядели бы привычные нам цифры в этой бредовой системе счисления:
0 — Ø 1 — A 2 — B 3 — C 4 — D 5 — E | 6 — AØ 7 — AA 8 — AB 9 — AC 10 — AD 11 — AE | 12 — BØ 13 — BA 14 — BB 15 — BC 16 — BD 17 — BE | 18 — CØ 19 — CA 20 — CB 21 — CC 22 — CD 23 — CE | 24 — DØ 25 — DA 26 — DB 27 — DC 28 — DD 29 — DE | 30 — EØ 31 — EA 32 — EB 33 — EC 34 — ED 35 — EE | 36 — AØØ 37 — AØA 38 — AØB 39 — AØC 40 — AØD 41 — AØE |
В этой системе мы считаем степенями шестёрки. Число ABADØ можно было бы перевести в привычную нам десятичную запись вот так:
A × 6 4 = 1 × 1296 = 1296
B × 6 3 = 2 × 216 = 432
1296 + 432 + 36 + 24 + 0 = 1788. В нашей десятичной системе это 1788, а у людей из параллельной вселенной это ABADØ, и это равноценно.
Выглядит бредово, но попробуйте вообразить, что у нас в сумме всего шесть пальцев. Каждый столбик — как раз шесть чисел. Очень легко считать в уме. Если бы нас с детства учили считать шестёрками, мы бы спокойно выучили этот способ и без проблем всё считали. А счёт десятками вызывал бы у нас искреннее недоумение: «Что за бред, считать числом AD? Гораздо удобнее считать от Ø до E!»
То, как мы шифруем и записываем числа, — это следствие многовековой традиции и физиологии. Вселенной, космосу, природе и стадам коров глубоко безразлично, что мы считаем степенями десятки. Природа не укладывается в эту нашу систему счёта.
Двоичная система (тоже нормальная)
Внутри компьютера работают транзисторы. У них нет знаков 0, 1, 2, 3… 9. Транзисторы могут быть только включёнными и выключенными — обозначим их 💡 и ⚫.
Мы можем научить компьютер шифровать наши числа этими транзисторами так же, как шестипалые люди шифровали наши числа буквами. Только у нас будет не 6 букв, а всего две: 💡 и ⚫. И выходит, что в каждом разряде будет стоять не число десяток в разной степени, не число шестёрок в разной степени, а число… двоек в разной степени. И так как у нас всего два знака, то получается, что мы можем обозначить либо наличие двойки в какой-то степени, либо отсутствие:
9 — 💡 ⚫⚫ 💡
10 — 💡 ⚫ 💡 ⚫
11 — 💡 ⚫ 💡 💡
12 — 💡 💡 ⚫⚫
13 — 💡 💡 ⚫ 💡
14 — 💡 💡 💡 ⚫
15 — 💡 💡 💡 💡
17 — 💡 ⚫⚫⚫ 💡
18 — 💡 ⚫⚫ 💡 ⚫
19 — 💡 ⚫⚫ 💡 💡
20 — 💡 ⚫ 💡 ⚫⚫
21 — 💡 ⚫ 💡 ⚫ 💡
21 — 💡 ⚫ 💡 💡 ⚫
23 — 💡 ⚫ 💡 💡 💡
24 — 💡 💡 ⚫⚫⚫
25 — 💡 💡 ⚫⚫ 💡
26 — 💡 💡 ⚫ 💡 ⚫
27 — 💡 💡 ⚫ 💡 💡
28 — 💡 💡 💡 ⚫⚫
29 — 💡 💡 💡 ⚫ 💡
30 — 💡 💡 💡 💡 ⚫
31 — 💡 💡 💡 💡 💡
33 — 💡 ⚫⚫⚫⚫ 💡
34 — 💡 ⚫⚫⚫ 💡 ⚫
35 — 💡 ⚫⚫⚫ 💡 💡
36 — 💡 ⚫⚫ 💡 ⚫⚫
37 — 💡 ⚫⚫ 💡 ⚫ 💡
38 — 💡 ⚫⚫ 💡 💡 ⚫
39 — 💡 ⚫⚫ 💡 💡 💡
40 — 💡 ⚫ 💡 ⚫⚫⚫
41 — 💡 ⚫ 💡 ⚫⚫ 💡
42 — 💡 ⚫ 💡 ⚫ 💡 ⚫
43 — 💡 ⚫ 💡 ⚫ 💡 💡
44 — 💡 ⚫ 💡 💡 ⚫⚫
45 — 💡⚫💡💡⚫💡
46 — 💡⚫💡💡💡⚫
47 — 💡⚫💡💡💡💡
48 — 💡💡⚫⚫⚫⚫
49 — 💡💡⚫⚫⚫💡
50 — 💡💡⚫⚫💡⚫
51 — 💡💡⚫⚫💡💡
52 — 💡💡⚫💡⚫⚫
53 — 💡💡⚫💡⚫💡
54 — 💡💡⚫💡💡⚫
55 — 💡💡⚫💡💡💡
56 — 💡💡💡⚫⚫⚫
57 — 💡💡💡⚫⚫💡
58 — 💡💡💡⚫💡⚫
59 — 💡💡💡⚫💡💡
60 — 💡💡💡💡⚫⚫
61 — 💡💡💡💡⚫💡
62 — 💡💡💡💡💡⚫
63 — 💡💡💡💡💡💡
Если перед нами число 💡 ⚫💡⚫⚫ 💡💡⚫⚫, мы можем разложить его на разряды, как в предыдущих примерах:
256 + 0 + 64 + 0 + 0 + 8 + 4 + 0 + 0 = 332
Получается, что десятипалые люди могут записать это число с помощью цифр 332, а компьютер с транзисторами — последовательностью транзисторов 💡⚫💡⚫⚫ 💡💡⚫⚫.
Если теперь заменить включённые транзисторы на единицы, а выключенные на нули, получится запись 1 0100 1100. Это и есть наша двоичная запись того же самого числа.
Почему говорят, что компьютер состоит из единиц и нулей (и всё тлен)
Инженеры научились шифровать привычные для нас числа в последовательность включённых и выключенных транзисторов.
Дальше эти транзисторы научились соединять таким образом, чтобы они умели складывать зашифрованные числа. Например, если сложить 💡⚫⚫ и ⚫⚫💡, получится 💡⚫💡. Мы писали об этом подробнее в статье о сложении через транзисторы.
Дальше эти суммы научились получать супербыстро. Потом научились получать разницу. Потом умножать. Потом делить. Потом всё это тоже научились делать супербыстро. Потом научились шифровать не только числа, но и буквы. Научились их хранить и считывать. Научились шифровать цвета и координаты. Научились хранить картинки. Последовательности картинок. Видео. Инструкции для компьютера. Программы. Операционные системы. Игры. Нейросети. Дипфейки.
И всё это основано на том, что компьютер умеет быстро-быстро складывать числа, зашифрованные как последовательности включённых и выключенных транзисторов.
При этом компьютер не понимает, что он делает. Он просто гоняет ток по транзисторам. Транзисторы не понимают, что они делают. По ним просто бежит ток. Лишь люди придают всему этому смысл.
Когда человека не станет, скорость света будет по-прежнему 299 792 458 метров в секунду. Но уже не будет тех, кто примется считать метры и секунды. Такие дела.
Как объяснять двоичную систему счисления
Кто-то только входит в IT-мир, кто-то объясняет информатику своему чаду.
Довольно быстро вы обнаружите, что не так-то просто объяснить, как работает двоичный счёт.
Это вам очевидно, что после 11 идёт 100, а новичку это ещё долго может быть непонятно.
Так вот, чтобы увеличить скорость понимания, мы решили сделать дидактический материал.
Проблема
Важно отметить, что даже распиаренный курс Гарвардского университета по компьютерным наукам «CS50» не помогает.
Парень из американского университета просто заявляет, что «нуль — это нуль», «один — это один», а потом идёт 10, а потом 11. Понятно? Думаю, нет. Вот спросите кого-то, кто не программист, а каким будет следующее число — высока вероятность, что он не сможет ответить. Слишком быстро проскочили идею о переносе разряда.
То же самое касается школьных методов перевода: во-первых, методы эти академически сухи, во-вторых, не интуитивны — например, не очевидно, почему после каскадного деления на 2 нужно ставить биты задом наперёд.
А если непонятно, то и не интересно. А если нет интереса, то и запоминается с трудом.
Мы это всё учли, и решили сделать интересное и постепенное объяснение.
Что мы предлагаем
Сначала нужно объяснить, как вообще работает обычная десятичная система счисления — и про конечный «алфавит» цифр, и про идею переноса разряда. Так развивается понимание принципа «системы счисления».
Только потом можно переходить к идее двоичной системы — и вот обучаемый уже медленно, но довольно уверенно говорит «1, 10, 11, 100».
Далее, мы решили попробовать совсем не школьный метод — объяснение двоичного счёта на пальцах: это когда загнутый палец это 0, а разогнутый это 1.
Я проверял это на подростках: показываешь им: «это 1, это 2, это 3 — теперь покажите мне 4». И весь класс сосредоточенно, медленно показывает средние пальцы. Отличницы в эсхатологическом восторге, задние парты тыкают друг другу в лицо и кричат «на тебе четвёрку!».
Провокативно? Да. Запоминается? 100%.
Теперь, когда тема стала «своей», можно переходить к теме перевода чисел из одной системы счисления в другую — начать лучше с классического школьного сухого перевода (если честно, то больше чтобы постращать).
А уже потом с помощью анимации объяснить идею перевода прямо на пальцах, и потом опять же на пальцах пересчитать число 132 в средние пальцы уже на обеих руках.
На десерт показываем, где двоичная и 16-ричная системы применяется в реальной жизни.
Двоичная система — это например QR-коды вокруг нас.
А 16-ричная система это в основном коды цветов в CSS и хеши разных стилей, от MD5 до UUID.
Итак, вот весь пакет видео-уроков (они бесплатные, в Ютубе):