перевод двоичного кода в картинку
Binary Image 0 1
Image to Binary Converter
Binary to Image Generator
Answers to Questions (FAQ)
What is a binary image? (Definition)
A binary image is a digital image whose pixels have 2 colors (usually black or white). It is therefore possible to represent a binary image as a series/array of 0 and 1.
How to encode an image in binary?
Some people see it as a form of binary art: the pixel art.
What are accepted image formats?
All web image formats (JPG, PNG, GIF, etc.) are accepted, but it is preferable to use a format that uses lossless compression (PNG, BMP, etc.), because in these cases the data of each pixel color is not altered.
Many icons of 16×16, 32×32, 64×64 size make excellent formats.
What is image binarization? (Image 1-bit)
Binarization is the action of binarizing (make binary with 2 elements) data.
From a practical point of view, an image with 2 colors (coded on 1 bit) is quick to store, each pixel is either 0 or 1.
Are 0 codes for black or for white?
There is no standard for 1-bit images, but generally 0 codes for black and 1 for white, but nothing prevents the use of 1 for black and 0 for white.
NB: An 8-bit image codes 0 for black and 255 for white.
Source code
Please, check our dCode Discord community for help requests!
NB: for encrypted messages, test our automatic cipher identifier!
Questions / Comments
Thanks to your feedback and relevant comments, dCode has developed the best ‘Binary Image 0 1’ tool, so feel free to write! Thank you!
Картинка, которая одновременно является кодом на Javascript
Изображения обычно хранятся как двоичные файлы, а файл Javascript по сути является обычным текстом. Оба типа файлов должны следовать собственным правилам: изображения имеют конкретный формат файла, определённым образом кодирующий данные. Для того, чтобы файлы Javascript можно было исполнять, они должны следовать определённому синтаксису. Я задался вопросом: можно ли создать файл изображения, одновременно являющийся допустимым синтаксисом Javascript, чтобы его можно было исполнять?
Прежде чем вы продолжите чтение, крайне рекомендую изучить эту песочницу кода с результатами моих экспериментов:
Если вы хотите посмотреть изображение и изучить его самостоятельно, то скачать его можно отсюда:
Выбор подходящего типа изображения
К сожалению, изображения содержат множество двоичных данных, которые при интерпретации в качестве Javascript будут выдавать ошибку. Поэтому моя первая мысль заключалась в следующем: что если просто поместить все данные изображения в большой комментарий, примерно так:
Этот заголовок файла привёл меня к следующей идее: что если использовать эту последовательность байтов как имя переменной и присвоить ей значение длинной строки:
К сожалению, большинство последовательностей байтов в заголовках файлов изображений содержат непечатаемые символы, которые нельзя использовать в именах переменных. Но есть один формат, который мы можем использовать: GIF. Блок заголовка GIF имеет вид 47 49 46 38 39 61, что удобно преобразуется в ASCII в строку GIF89a — абсолютно допустимое имя переменной!
Выбор подходящих размеров изображения
Теперь, когда мы нашли формат изображения, начинающийся с допустимого имени переменной, нам нужно добавить символы знака равенства и обратного апострофа (backtick). Следовательно следующими четырьмя байтами файла будут: 3D 09 60 04
Первые байты изображения
В формате GIF четыре байта после заголовка определяют размеры изображения. Нам нужно уместить в них 3D (знак равенства) и 60 (обратный апостроф, открывающий строку). В GIF используется порядок little endian, поэтому второй и четвёртый символы имеют огромное влияние на размеры изображения. Они должны быть как можно меньше, чтобы изображение не получилось шириной и высотой в десятки тысяч пикселей. Следовательно, нам нужно хранить большие байты 3D и 60 в наименее значимых байтах.
Наименьший пробельный символ — это 09 (символ горизонтальной табуляции). Он даёт нам ширину изображения 3D 09, что в little endian равно 2365; немного шире, чем бы мне хотелось, но всё равно вполне приемлемо.
Для второго байта высоты можно выбрать значение, дающее хорошее соотношение сторон. Я выбрал 04, что даёт нам высоту 60 04, или 1120 пикселей.
Засовываем в файл скрипт
Пока наш исполняемый GIF почти ничего не делает. Он просто присваивает глобальной переменной GIF89a длинную строку. Мы хотим, чтобы происходило что-нибудь интересное! Основная часть данных внутри GIF используется для кодирования изображения, поэтому если мы попробуем вставить туда Javascript, то изображение, вероятно, будет сильно искажённым. Но по какой-то причине формат GIF содержит нечто под названием Comment Extension. Это место для хранения метаданных, которые не интерпретируются декодером GIF — идеальное место для нашей Javascript-логики.
Это расширение для комментариев находится сразу после таблицы цветов GIF. Поскольку мы можем поместить туда любое содержимое, можно запросто закрыть строку GIF89a, добавить весь Javascript, а затем начать многострочный блок комментария, чтобы остальная часть изображения не влияла на парсер Javascript.
В конечном итоге наш файл может выглядеть следующим образом:
Однако существует небольшое ограничение: хотя сам блок комментария может иметь любой размер, он состоит из нескольких подблоков, и максимальный размер каждого из них составляет 255. Между подблоками есть один байт, определяющий длину следующего подблока. Поэтому чтобы уместить туда большой скрипт, его нужно разделить на мелкие фрагменты, примерно вот так:
Шестнадцатеричные коды в комментариях — это байты, определяющие размер следующего подблока. Они не относятся к Javascript, но обязательны для формата файла GIF. Чтобы они не мешали остальной части кода, их нужно поместить в комментарии. Я написал небольшой скрипт, обрабатывающий фрагменты скрипта и добавляющий их в файл изображения:
Подчищаем двоичные данные
Теперь, когда у нас есть базовая структура, нам нужно сделать так, чтобы двоичные данные изображения не испортили синтаксис кода. Как говорилось в предыдущем разделе, файл состоит из трёх разделов: в первом выполняется присваивание значения переменной GIF89a, второй — это код на Javascript, а третий — комментарий из нескольких строк.
Давайте взглянем на первую часть с присвоением значения переменной:
Боремся с искажениями
В конце Javascript-кода мы открыли многострочный комментарий, чтобы двоичные данные изображения не влияли на парсинг Javascript:
Завершаем файл
Нам осталась последняя операция — завершение файла. Файл должен завершаться байтами 00 3B, поэтому нам нужно завершить комментарий раньше. Поскольку это конец файла и любые потенциальные повреждения будут не особо заметны, я просто завершил комментарий из блоков и добавил однострочный комментарий, чтобы конец файла не вызывал проблем при парсинге:
Уговариваем браузер исполнить изображение
Refused to execute script from ‘http://localhost:8080/image.gif’ because its MIME type (‘image/gif’) is not executable. [Отказ от исполнения скрипта из ‘http://localhost:8080/image.gif’, потому что его MIME-тип не является исполняемым.]
То есть браузер справедливо говорит: «Это изображение, я не буду его исполнять!». И в большинстве случаев это вполне уместно. Но мы всё равно хотим его исполнить. Решение заключается в том, чтобы просто не говорить браузеру, что это изображение. Для этого я написал небольшой сервер, передающий изображение без информации заголовка.
Без информации о MIME-типе из заголовка браузер не знает, что это изображение и делает именно то, что лучше всего подходит в контексте: отображает его как изображение в теге или исполняет как Javascript в теге
Перевод картинки расширения bmp в двоичный код
Считаю теперь с двоичного
Вот так выглядит картинка в hex редакторе
1 ответ 1
Для начала вам нужно ознакомиться с общим описанием формата, например, в Википедии: BMP.
Если упрощенно, в начале файла идут заголовки, потом уже сами бинарные данные:
Общая структура
Данные в формате BMP состоят из трёх основных блоков различного размера:
По сути, чтобы добраться до описания пиксельных данных, нужно пропустить все заголовки.
Смотрим дальше, описание структуры BITMAPFILEHEADER (которая, собственно, идет с начала файла BMP):
Смотрим на ваш скриншот:
В поле bfOffBits в файле записано число 0x36, и по смещению 0x36 от начала файла подряд идут значения FF (совпадение? не думаю). Тройка байт FF FF FF (8 бит * 3 = 24 бита на пиксель) как раз кодируют один пиксель белого цвета, т.е. это как раз и есть искомые пиксельные данные.
Что еще желательно знать? Во-первых при чтении нужно проверить, что картинка действительно имеет формат RGB с 24 битами на пиксель. Во-вторых нужно знать размер картинки.
Для этого нужно смотреть что идет следом за структурой. А следом идет структура BITMAPINFO, но сложность в том, что она может быть разных версий. Версия задается в первых четырех байтах. Самая древняя версия имела размер 12 байт, более новые от 40 байт и выше. Будем для простоты считать, что поддерживаем только новые форматы BMP, тем более что начало структуры BITMAPINFO у новых форматов совпадает.
Итак, в структурах BITMAPINFO новых форматах по порядку идут:
Снова смотрим на скриншот:
Как с этим работать программно? Два варианта:
Псевдокод для второго случая:
Еще одна тонкость, если в поле biHeight лежит положительное число, то строки пикселей в файле записаны в обратном порядке (от нижней строки к верхней строке). Если отрицательное, то в прямом порядке.
Перевод изображения в двоичный код
Двоичный код ниже:
010000100100110111110110000000010000000000000000000000000000 0000
000000000000000000111110000000000000000000000000001010000000 0000
000000000000000000110111000000000000000000000000001101110000 0000
000000000000000000000001000000000000000100000000000000000000 0000
000000000000000010111000000000010000000000000000110001000000 1110
000000000000000011000100000011100000000000000000000000100000 0000
000000000000000000000010000000000000000000000000111111111111 1111
111111110000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000001111000 0000
000000000000000000000000000000000000000000000000000001111100 0000
000000000000000000000000000000000000000000000000000001111100 0000
000000000000000000000000111100000000000000000000000001111100 0000
000000000000000000000001111100000000000000000000000001111110 0000
000000000000000000000001111100000000000000000000000000111110 0000
000000000000000000000011111100000000000000000000000000111111 0000
000000000000000000000011111100000000000000000000000000011111 0000
000000000000000000000011111000000000000000000000000000011111 1000
000000000000000000000111111000000000000000000000000000001111 1000
000000000000000000000111110000000000000000000000000000001111 1100
000000000000000000001111110000000000000000000000000000000111 1100
000000000000000000001111100000000000000000000000000000000111 1100
000000000000000000011111100000000000000000000000000000000111 1110
000000000000000000011111000000000000000000000000000000000011 1110
000000000000000000111111000000000000000000000000000000000011 1111
111111111111111111111110000000000000000000000000000000000001 1111
111111111111111111111110000000000000000000000000000000000001 1111
111111111111111111111100000000000000000000000000000000000001 1111
111111111111111111111100000000000000000000000000000000000001 1111
111111111111111111111000000000000000000000000000000000000000 1111
111111111111111111111000000000000000000000000000000000000000 0111
111000000000000111110000000000000000000000000000000000000000 0111
111000000000001111110000000000000000000000000000000000000000 0011
111000000000001111100000000000000000000000000000000000000000 0011
111100000000011111100000000000000000000000000000000000000000 0001
111100000000011111000000000000000000000000000000000000000000 0001
111110000000111111000000000000000000000000000000000000000000 0000
111110000000111110000000000000000000000000000000000000000000 0000
111111000001111110000000000000000000000000000000000000000000 0000
011111000001111100000000000000000000000000000000000000000000 0000
011111100011111100000000000000000000000000000000000000000000 0000
001111100011111000000000000000000000000000000000000000000000 0000
001111100111111000000000000000000000000000000000000000000000 0000
001111110111110000000000000000000000000000000000000000000000 0000
000111111111110000000000000000000000000000000000000000000000 0000
000111111111100000000000000000000000000000000000000000000000 0000
000011111111100000000000000000000000000000000000000000000000 0000
000011111111000000000000000000000000000000000000000000000000 0000
000001111111000000000000000000000000000000000000000000000000 0000
000001111111000000000000000000000000000000000000000000000000 0000
000001111110000000000000000000000000000000000000000000000000 0000
000000111110000000000000000000000000000000000000000000000000 0000
000000111110000000000000000000000000000000000000000000000000 0000
000000011110000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000
01000010 01001101 11110110 00000001 00000000 00000000 00000000 00000000
00000000 00000000 00111110 00000000 00000000 00000000 00101000 00000000
00000000 00000000 00110111 00000000 00000000 00000000 00110111 00000000
00000000 00000000 00000001 00000000 00000001 00000000 00000000 00000000
00000000 00000000 10111000 00000001 00000000 00000000 11000100 00001110
00000000 00000000 11000100 00001110 00000000 00000000 00000010 00000000
00000000 00000000 00000010 00000000 00000000 00000000 11111111 11111111
11111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000111 10000000
00000000 00000000 00000000 00000000 00000000 00000000 00000111 11000000
00000000 00000000 00000000 00000000 00000000 00000000 00000111 11000000
00000000 00000000 00000000 11110000 00000000 00000000 00000111 11000000
00000000 00000000 00000001 11110000 00000000 00000000 00000111 11100000
00000000 00000000 00000001 11110000 00000000 00000000 00000011 11100000
00000000 00000000 00000011 11110000 00000000 00000000 00000011 11110000
00000000 00000000 00000011 11110000 00000000 00000000 00000001 11110000
00000000 00000000 00000011 11100000 00000000 00000000 00000001 11111000
00000000 00000000 00000111 11100000 00000000 00000000 00000000 11111000
00000000 00000000 00000111 11000000 00000000 00000000 00000000 11111100
00000000 00000000 00001111 11000000 00000000 00000000 00000000 01111100
00000000 00000000 00001111 10000000 00000000 00000000 00000000 01111100
00000000 00000000 00011111 10000000 00000000 00000000 00000000 01111110
00000000 00000000 00011111 00000000 00000000 00000000 00000000 00111110
00000000 00000000 00111111 00000000 00000000 00000000 00000000 00111111
11111111 11111111 11111110 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111110 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111100 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111100 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111000 00000000 00000000 00000000 00000000 00001111
11111111 11111111 11111000 00000000 00000000 00000000 00000000 00000111
11100000 00000001 11110000 00000000 00000000 00000000 00000000 00000111
11100000 00000011 11110000 00000000 00000000 00000000 00000000 00000011
11100000 00000011 11100000 00000000 00000000 00000000 00000000 00000011
11110000 00000111 11100000 00000000 00000000 00000000 00000000 00000001
11110000 00000111 11000000 00000000 00000000 00000000 00000000 00000001
11111000 00001111 11000000 00000000 00000000 00000000 00000000 00000000
11111000 00001111 10000000 00000000 00000000 00000000 00000000 00000000
11111100 00011111 10000000 00000000 00000000 00000000 00000000 00000000
01111100 00011111 00000000 00000000 00000000 00000000 00000000 00000000
01111110 00111111 00000000 00000000 00000000 00000000 00000000 00000000
00111110 00111110 00000000 00000000 00000000 00000000 00000000 00000000
00111110 01111110 00000000 00000000 00000000 00000000 00000000 00000000
00111111 01111100 00000000 00000000 00000000 00000000 00000000 00000000
00011111 11111100 00000000 00000000 00000000 00000000 00000000 00000000
00011111 11111000 00000000 00000000 00000000 00000000 00000000 00000000
00001111 11111000 00000000 00000000 00000000 00000000 00000000 00000000
00001111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
00000111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
00000111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
00000111 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000011 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000011 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000001 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000
PS Автор статьи переводил свою картинку вручную т.к. её разрешение 3×5 пикселей; у меня в python shell двоичный код без брешей, не знаю почему здесь так; Мне 15 лет могу что-то не понимать, поэтому, пожалуйста, объясняйте подробнее и понятнее. Спасибо!
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Двоичное счисление на пальцах
Все знают, что компьютеры состоят из единиц и нулей. Но что это значит на самом деле?
Если у вас в школе была информатика, не исключено, что там было упражнение на перевод обычных чисел в двоичную систему и обратно. Маловероятно, что кто-то вам объяснял практический смысл этой процедуры и откуда вообще берётся двоичное счисление. Давайте закроем этот разрыв.
Эта статья не имеет практической ценности — читайте её просто ради интереса к окружающему миру. Если нужны практические статьи, заходите в наш раздел «Где-то баг», там каждая статья — это практически применимый проект.
Отличный план
Чтобы объяснить всё это, нам понадобится несколько тезисов:
Система записи — это шифр
Если у нас есть девять коров, мы можем записать их как 🐄🐄🐄🐄🐄🐄🐄🐄🐄 или как 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 метров в секунду. Но уже не будет тех, кто примется считать метры и секунды. Такие дела.