В каком виде процессор обрабатывает информацию на английском языке в двоичном коде в текстовом виде

Обновлено: 21.11.2024

Понимать более низкие и более высокие уровни инструкций по программированию. Понимание компиляторов, компиляции, компоновки и развертывания.

На аппаратном уровне компьютеры понимают один язык, называемый машинным языком (также называемый объектным кодом). Это набор инструкций, поддерживаемых аппаратным обеспечением процессора компьютера, и он специфичен для каждого типа процессора. Этот язык объектного кода является числовым по своей природе и выражается в двоичном коде, который представляет собой числовое кодирование, состоящее только из 1 и 0 (основание 2). Программировать в двоичном формате очень утомительно, поэтому были созданы языки более высокого уровня, чтобы упростить создание программ. В языке более высокого уровня вы используете синтаксис, похожий на английский и более простой для понимания, чтобы выразить то, что вы хотите, чтобы компьютер делал. Задачей языка более высокого уровня является перевод этих письменных инструкций в двоичный объектный код для выполнения компьютером. На самом деле, когда программный файл создается на языке более высокого уровня, он будет содержать только двоичные инструкции для компьютера, а не ваш исходный код.

Обычно программист пишет инструкции на выбранном языке более высокого уровня, в нашем случае на Java, и эти инструкции или исходный код хранятся в текстовом виде в файле. Затем этот исходный файл передается программе, называемой компилятором, которая переводит исходный язык в объектный код в двоичной форме и записывает его в другой файл, называемый программой. Примером может служить файл .exe в Windows. Может быть дополнительный шаг, называемый связыванием, который представляет собой процесс объединения инструкций программиста с библиотеками инструкций, созданными кем-то другим. Иногда файл программы может быть отправлен на другой компьютер для выполнения. Это называется развертыванием.

Когда программа запускается на компьютере, операционная система компьютера открывает файл программы, считывает и выполняет найденные двоичные инструкции.

Точные шаги и процессы, предпринимаемые каждым языком для преобразования исходного кода в исполняемую программу, могут различаться, но всегда будут следовать этому общему набору шагов. Процесс преобразования исходного кода в программу, пригодную для использования на компьютере, называется компиляцией или компиляцией. Важно отметить, что компиляция — это одноразовая упаковка определенного набора исходного кода в программный файл. Если исходный код изменен программистом после компиляции, ранее скомпилированный программный файл будет представлять собой тот же набор исходного кода, который существовал во время компиляции. Чтобы использовать любые изменения, сделанные в исходном коде, программу необходимо перекомпилировать.

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

Не могли бы вы показать мне несколько примеров? Например, как компьютер переводит букву «А» в двоичный код?

Когда компьютеры видят двоичный код, как они могут узнать, представляет ли эта длинная строка из нулей и единиц число, слово или инструкцию?

Допустим, программист закодировал букву "Z" так, чтобы она транслировалась в эту двоичную строку: 11011001111011010111

Поэтому, когда компьютер встретит эту двоичную строку, он преобразует ее в букву "Z".

Но что произойдет, если мы спросим у этого компьютера: "Каково произведение 709 на 1259?"

Компьютер ответит нам "892631". Но это число в двоичном формате равно 11011001111011010111.

Так какая разница между "Z" и "892631"?

Обратите внимание, что я мало разбираюсь в информатике, поэтому, пожалуйста, объясните все простыми словами.

5 ответов 5

Компьютеры на самом деле ничего не переводят в двоичный код, все с самого начала двоичное, и компьютер никогда не знает ничего, кроме двоичного.

Символ A, хранящийся в памяти, будет 01000001 , и компьютер воспринимает его только как двоичное число. Когда мы просим компьютер отобразить это число в виде символа на экране, он будет искать его графическое представление в определении шрифта, чтобы найти другие двоичные числа для отправки на аппаратное обеспечение экрана.

Например, если бы компьютер был восьмибитным Atari, он нашел бы восемь двоичных значений для представления символа A на экране:

Как вы видите, двоичные значения преобразуются в темные и яркие пиксели, когда графическое оборудование отрисовывает их на экране.

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

Если вы, например, берете код символа для A и хотите отобразить его в виде десятичного числа, компьютер вычислит, что десятичное представление числа — это цифры 6 (110) и 5 ​​(101), переведите это в символ 6 (00110110) и символ 5 (00110101), а затем перевести их в графическое представление.

Это отличный вопрос, и на его полное объяснение потребуются годы и несколько докторов наук. Я могу предложить вам упрощенный ответ, но для полного понимания вам придется провести НАМНОГО больше исследований. Могу ли я предложить несколько бесплатных онлайн-курсов от Массачусетского технологического института по этому вопросу здесь.

На самом низком уровне буква A и число 65 фактически хранятся с использованием одной и той же последовательности нулей и единиц. 1000001, если не ошибаюсь.

Затем компьютер решает, что это такое, когда берет это из памяти. Это означает, что буквы могут отображаться как цифры и наоборот.

Способ, которым компьютер узнает, что он ищет, заключается в том, что программист сообщает ему, что он ищет. Программист говорит, что мне нужен номер, хранящийся в таком-то месте, и компьютер идет и ищет его.

Давайте поднимемся на уровень выше, потому что редко программы программируются на таком низком уровне. другие программы (обычно компиляторы, которые берут код, подобный C++, и превращают его во что-то, понятное компьютеру). Убедитесь, что место, к которому мы обращаемся, на самом деле то, что мы сказали. У них есть дополнительная информация, которая сообщает им, что этот конкретный набор единиц и нулей на самом деле является типом с плавающей запятой (имеет десятичную точку), тогда как этот набор является целым числом (без десятичной точки)

Затем на основе этих типов строятся другие типы, большие целые числа, числа с плавающей запятой или строки символов, и снова компиляторы применяют эти типы.

Это чрезмерное упрощение, и я понимаю, что здесь все не совсем правильно, но это направит вас на правильный путь. Вы можете ознакомиться с некоторыми из этих тем, чтобы получить более полное представление:

Надеюсь, это немного прояснит ситуацию. Не стесняйтесь обращаться за разъяснениями!

Исходя из этого ответа, у вас есть двоичный код, состоящий из 0 и 1, который работает прямо на оборудовании. Дальнейший уровень абстракции превращает его в сборку, которая содержит простые инструкции, такие как ADD, SUB, DIV, MUL и т. д., и объясняет, как должен взаимодействовать двоичный файл. Это все еще было очень подвержено ошибкам, и в конечном итоге у вас были простые языки программирования с грамматикой и синтаксисом, которые затем компилировались в ассемблер и двоичные файлы, переводя человеческие слова в машинный язык.

Так какая разница между "Z" и "892631"?

Это не так. Для компьютера все равно 0 и 1. Эти необработанные биты не имеют смысла, пока процессору НЕ СКАЗАНО, что делать с этими 0 и 1!

Например, я мог бы создать переменную x и присвоить ей значение 0b01000001 (0b означает "это число, которое я описываю в двоичном виде"). Затем я мог бы попросить процессор вывести переменную x на экран для меня. Но СНАЧАЛА я должен сообщить процессору, ЧТО такое x!

Таким образом, x сам по себе ничего не значит, кроме необработанных битов 01000001 . Но моя работа как программиста состоит в том, чтобы сообщить компьютеру, что на самом деле означает x.

Компьютер использует только 7 бит для хранения букв/специальных символов, тогда как для хранения числа он использует все 8 бит байта.

В качестве примера возьмем "A" И "65".

65/2 -- QUO равно 32, а напоминание равно 1 1 2 в степени 0 равно 1

32/2 quo – это 16, а напоминание – 0 01

16/2 quo – это 8, а напоминание – 0 001

8/2 quo – это 4, а напоминание – 0 0001

4/2 quo – это 2, а напоминание – 0 00001

2/2 quo равно 1, а напоминание равно 0 1000001 2 в степени 6 равно 64

Значение ASCII для буквы A сохраняется как 01000001 в двоичном формате (используется только 7 бит, а 8-й бит сохраняется с 0 для букв и специальных символов).

Надеюсь, это поможет.

  1. Предположим, что ваш жесткий диск представляет собой не что иное, как алюминиевую пластину круглой формы с крошечными отверстиями/пятнами по всему периметру (видно только под микроскопом). Спот – это небольшая дыра, сгруппированная по байтам – 8 бит (1 бит – 1 дырка).
  2. Оперативная память похожа на жесткий диск, но представляет собой полупроводник, сделанный из кремния, поэтому он может хранить информацию в форме электрического поля и имеет адрес для каждого байта, поэтому работает быстрее.
  3. Компьютер сохраняет всю информацию, которую вы вводите с клавиатуры, на жестком диске в виде магнитных импульсов (обозначаемых как 1 для человеческого понимания), называемых 1. Если информации нет, то точка (крошечная дырочка) пуста и называется нулем.

Давайте обсудим первую часть вашего вопроса. Не могли бы вы показать мне несколько примеров? Например, как компьютер переводит букву «А» в двоичный код?

  1. Например, вы вводите символы "A" и "அ" с клавиатуры.
  2. Символ "A" представлен как 65 в Unicode/ASCII, что соответствует 01000001 в двоичном коде с основанием 2. ОС выполняет сопоставление A с Binary.Введенный вами символ «А» теперь хранится на жестком диске как 01000001 и будет отображаться в 8 различных местах (например, отсутствие магнитного импульса для крайнего левого числа 0, магнитный импульс для 7 в седьмом бите и т. д.).
  3. В случае ОЗУ информация хранится в виде электрических импульсов, поэтому ОЗУ теряет всю информацию при отключении питания.

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

Теперь компилятору решать, как его хранить. Если это компилятор C на процессоре AMD/ОС Windows, он сохраняет значение в 2 байтах (один байт для 5 и один байт для 6). Байт, хранящий значение 5, будет справа от 6, если это обработка AMD — это называется младшим порядком байтов. Программа C не поддерживает символ 'அ', так как для хранения международных символов требуется более 1 байта.

Если это компилятор Java, он использует переменную длину 4 байта, называемую UTF-16. В случае буквы «A» требуется 1 байт, поскольку представление Unicode/ASCII равно 65. Принимая во внимание, что если вы сохраняете символ международного языка, такой как «அ» (аналогично A на тамильском языке), тогда соответствующее значение Unicode равно 2949 и соответствующее двоичное значение равно 11100000 10101110 10000101 (3 байта). В Java нет проблем с хранением и чтением букв «A» и «அ».

Теперь представьте, что вы сохранили символ 'அ' на жестком диске, используя процессор Java/Windows/AMD в качестве символа типа (Char).

Теперь представьте, что вы хотите прочитать это, используя программу C как Char. Компилятор C поддерживает только ASCII, но не полный список набора Unicode. Здесь C будет читать самый правый ( 10000101) байт из вышеуказанных 3 байтов (для типа char он читает 1 байт), что вы получаете на экране? Ваша программа на C без проблем прочитает этот 1 байт и нарисует его на вашем экране, если вы попросили свою программу распечатать. Таким образом, компилятор создает различия.

****Давайте сейчас обсудим вторую часть вашего вопроса:** *И когда компьютеры видят двоичный код, как они могут узнать, представляет ли эта длинная строка из нулей и единиц число, слово или инструкцию? ?***

Теперь ваша скомпилированная Java-программа загружается в ОЗУ в области текста и данных (ОЗУ разделено на области текста и данных на высоком уровне). Теперь вы просите АЛУ процессора выполнить набор инструкций вашей программы, который называется процессом.

Строка в вашей скомпилированной программе — это инструкция по перемещению данных из одной переменной в другую.

Когда АЛУ выполняет первую инструкцию, она переходит в соответствующие регистры, расположенные вне ОЗУ. Процессор имеет набор регистров для данных и набор регистров инструкций. Теперь АЛУ знает, какой регистр для чего предназначен, и на основании этого выполняет ваши инструкции.

Машинный язык, в котором код дополнения цифры является дополнением кода цифры.

Связанные термины:

Скачать в формате PDF

Об этой странице

Что такое сборка?

МАЙКЛ Л. ШМИТ, процессор Pentium™, 1995 г.

Машинный язык

Машинный язык — это язык, понятный компьютеру. Это очень сложно понять, но это единственное, с чем может работать компьютер. Все программы и языки программирования в конечном итоге генерируют или запускают программы на машинном языке. Машинный язык состоит из инструкций и данных, которые представляют собой двоичные числа. Машинный язык обычно отображается в шестнадцатеричной форме, чтобы его было немного легче читать. Язык ассемблера почти такой же, как машинный, за исключением того, что инструкции, переменные и адреса имеют имена, а не просто шестнадцатеричные числа.

Обзор исследования поддерживаемого инструментами тестирования проектов, основанных на требованиях, на основе моделей

Ралука Маринеску, . Пол Петтерссон, Достижения в области компьютеров, 2015 г.

6.4 АсмЛ

Затем мы выбираем репрезентативный инструмент категории записи до/после и применяем его к нашему рабочему примеру.

Архитектура

Сара Л. Харрис, Дэвид Харрис, в Digital Design and Computer Architecture, 2022

6.4.7 Интерпретация кода машинного языка

Для интерпретации машинного языка необходимо расшифровать поля каждого 32-битного командного слова. В разных инструкциях используются разные форматы, но все форматы имеют общее 7-битное поле кода операции. Таким образом, лучше всего начать с просмотра кода операции, чтобы определить, является ли это инструкцией типа R, I, S/B или U/J.

Перевод машинного языка на язык ассемблера

Переведите следующий код машинного языка на язык ассемблера.

Решение

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

0100 0001 1111 1110 1000 0011 1011 0011 (0x41FE83B3)

1111 1101 1010 0100 1000 0010 1001 0011 (0xFDA48293)

Код операции определяет, как интерпретировать остальные биты. Код операции первой инструкции — 01100112 ; Итак, согласно Таблице B.1 в Приложении B, это инструкция R-типа, и мы можем разделить остальные биты на поля R-типа, как показано в верхней части рисунка 6.28. Код операции второй инструкции — 00100112 , что означает, что это инструкция I-типа. Мы группируем оставшиеся биты в формате I-типа, как показано на рис. 6.28, где показан ассемблерный код, эквивалентный двум машинным инструкциям.

Рисунок 6.28. Преобразование машинного кода в ассемблерный код

Языки программирования

ХАРВИ М. ДЕЙТЕЛЬ, БАРБАРА ДЕЙТЕЛЬ, Введение в обработку информации, 1986 г.

Язык ассемблера

Сегодня программисты редко пишут программы на машинном языке. Вместо этого они используют более понятные языки ассемблера или языки высокого уровня. Эти языки частично ответственны за широкое использование компьютеров в настоящее время.

Программисты, обремененные программированием на машинном языке, начали использовать сокращения, похожие на английские, для различных инструкций машинного языка. Эти аббревиатуры, называемые мнемоникой (вспомогательные средства запоминания), относятся к действию, которое необходимо предпринять, и имеют больше смысла для программиста. Например, вместо того, чтобы писать «+ 20» для обозначения сложения, программист может написать мнемоническое «ДОБАВИТЬ»; «SUB» может использоваться для вычитания, «DIV» — для деления и т.п. Даже местам хранения были даны имена. Если бы ячейка 92 содержала сумму, ее можно было бы назвать «ИТОГО» или «СУММА» вместо 92. Получившиеся в результате программы было намного легче понять и модифицировать. Например, в программе начисления заработной платы, которая вычитает общие вычеты из валовой заработной платы для расчета чистой заработной платы, могут появиться следующие инструкции на ассемблере:

К сожалению, компьютеры не могли понять эти программы, поэтому мнемоники все равно приходилось переводить на машинный язык для обработки. В профессии программиста возникла аристократия. «Высший класс» состоял из программистов, которые писали программы с использованием англоподобной мнемотехники. Затем «простолюдины», которых называли ассемблерами, брали эти программы и вручную переводили их на машинный язык — довольно механическая работа. В 1950-х годах программисты поняли, что этот перевод может быть выполнен компьютерами быстрее и точнее, чем люди, и поэтому была написана первая программа на ассемблере, или программа-переводчик (рис. 9-1). Программа инструкций, написанная на языке ассемблера, известна как исходная программа; программа на ассемблере переводит ее в программу на машинном языке, называемую объектной программой.

Рисунок 9-1. Программа на ассемблере переводит программу на языке ассемблера (исходную программу) в программу на машинном языке (объектную программу).

Программы можно было писать быстрее на языке ассемблера, чем на машинном языке, хотя их все равно приходилось переводить на машинный язык, прежде чем они могли быть выполнены (см. рис. 9-2). Работа по переводу была более чем оправдана благодаря увеличению скорости программирования и уменьшению количества ошибок.

Рисунок 9-2. Пример мнемоники на языке ассемблера, используемой в некоторых мейнфреймах IBM. Полный набор инструкций предлагает около 200 мнемонических кодов. Коды операций показаны в шестнадцатеричной системе счисления (с основанием 16).

Программы на языке ассемблера также зависят от машины и не переносимы. Программистам приходится писать большое количество инструкций даже для выполнения простых задач, а программы по-прежнему выглядят на компьютерном языке ( рис. 9-3 ).

Возможно, в настоящее время языки ассемблера в основном используются при написании операционных систем — программ, управляющих оборудованием и делающих его более доступным для пользователей компьютеров (см. главу 12 ).

Макроинструкции

Следующим шагом в процессе эволюции стало введение макрокоманд . Макроинструкция — это одна инструкция, которая транслируется в несколько инструкций машинного языка. С помощью одной макрокоманды программист может указать действие, для которого обычно требуется несколько инструкций на языке ассемблера. Например, простой макрос SUM A, B, C может использоваться для добавления A к B и сохранения результатов в C.

Всякий раз, когда программа на ассемблере сталкивается с макрокомандой, она сначала выполняет раскрытие макроса. Он создает серию инструкций на языке ассемблера для выполнения функции макроса.Например, СУММА A, B, C может быть расширена до

а затем ассемблер переводил эти инструкции на машинный язык.

Изучение вычислительного языка (обновление главы 15)

Менно ван Заанен, Коллин де ла Игуэра, Справочник по логике и языку (второе издание), 2011 г.

16.1 Введение

При работе с языком (машинное) обучение может принимать различные формы, наиболее важными из которых являются те, которые связаны с изучением формальных языков и грамматик на основе данных. Вопросы в этом контексте находились на пересечении областей индуктивного вывода и компьютерной лингвистики в течение последних 50 лет. Возвращаясь к новаторской работе, Хомский (1955) и Соломонов (1964) по совершенно разным причинам интересовались системами или программами, которые могли бы выводить язык при представлении информации о нем.

Голд (1967) чуть позже предложил объединяющую парадигму под названием идентификация в пределе, а термин грамматический вывод, по-видимому, появился в докторской диссертации Хорнинга (1969).

Вне области лингвистики исследователи и инженеры, занимающиеся распознаванием образов, под влиянием Фу (1974) изобрели алгоритмы и изучали подклассы языков и грамматик с точки зрения того, что можно или нельзя изучить ( Фу и Бут, 1975 г.).

Исследователи в области машинного обучения занимались смежными проблемами (самой известной из них была задача вывода детерминированного конечного автомата на основе примеров и контрпримеров строк). Angluin (1981, 1987) ввел важную настройку активного обучения или обучения на основе запросов, в то время как Питт и Вармут (1993) и Питт (1989) дали несколько результатов, вдохновленных сложностью. , показывая сложность различных проблем обучения.

В более прикладных областях, таких как вычислительная биология, исследователи также работали над изучением грамматик или автоматов из строк, например Brazma et al. (1998) . Точно так же, исходя из компьютерной лингвистики, можно указать на работы, связанные с изучением языка с более сложными грамматическими формализмами (Канадзава, 1998), более статистическими подходами, основанными на построении языковых моделей, или различными системами, введенными для автоматического построения грамматик из предложений (Адриаанс , 1992; ван Заанен, 2000). Обзоры связанных работ в конкретных областях можно найти у Сакакибара (1997 г.), де ла Хигера (2005 г.) и Вольф (2006 г.) .

При рассмотрении истории теории формального обучения можно выделить несколько тенденций. Из «интуитивных» подходов, описанных в ранних исследованиях, возникли более фундаментальные идеи. Основываясь на этих идеях и более широком доступе данных, больше исследований было направлено на прикладное изучение языков. В последнее время наблюдается тенденция требовать более теоретически обоснованных доказательств в прикладной области, в основном из-за увеличения размера проблем и важности наличия гарантий на результаты. Эти тенденции привели к междисциплинарному характеру формального изучения языка. Здесь можно найти аспекты изучения естественного языка (как области применения), машинного обучения и теории информации.

При попытке найти общие черты работы в области изучения языков следует учитывать как минимум два аспекта. Обучение происходит в обстановке. Проблемы в этом измерении — это свойства обучающих данных, такие как положительные/отрицательные экземпляры, количество или уровень шума, а также мера успеха. Другое измерение связано с парадигмами в отношении обобщения обучающих данных. Цель изучения языка состоит в том, чтобы найти язык, который используется для генерации обучающих данных. Этот язык обычно более общий, чем обучающие данные, и требует подхода к обобщению.

Эта глава организована по параметрам обучения и парадигм. Во-первых, мы рассмотрим различные настройки обучения и их параметры. Во-вторых, обсуждаются различные парадигмы обучения, после чего делается вывод.

Когда буква А не буква А? Ну, компьютеры не используют букву A. Они используют восьмизначное двоичное число 01000001 для представления A. В этом руководстве по двоичным числам рассказывается, что такое двоичные числа и как их вычислять.

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

То, как вы создаете и преобразовываете двоичные числа, – это хороший способ узнать, как компьютеры обрабатывают данные на самом низком уровне в своих аппаратных схемах.

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

[Не очень] секретная формула

Чтобы представить букву А как 01000001, компьютеру (и вам, если следовать дальше) Â необходимо несколько основных инструментов. Одним из инструментов является таблица преобразования ASCII. Не вдаваясь в технические подробности, диаграмма ASCII сопоставляет уникальное число от 1 до 255 всем буквам алфавита, заглавным (AZ) и строчным (az), а также числам (0–9), пробелам и другим символам. специальные символы. Уникальное число ASCII, которое соответствует каждому символу, например, заглавной букве A, используется для вычисления уникального восьмизначного двоичного числа, представляющего собой комбинацию единиц и нулей, например 01000001.

По сути, это двухэтапный секретный код. Первый шаг — получить уникальный номер ASCII для буквы. Второй шаг – создание уникального восьмизначного двоичного числа, представляющего собой комбинацию единиц и нулей для представления числа ASCII.

И, конечно же, переход от восьмисимвольной комбинации единиц и нулей к букве или символу меняет этот процесс на обратный: сначала преобразуйте двоичное число в число от 1 до 255, а затем используйте это число, чтобы найти букву в Диаграмма ASCII.

Как создавать двоичные числа

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

Двоичные числа со значениями и позициями на пустом листе

Если вы прочитаете эти значения по умолчанию снизу вверх, сможете ли вы сказать, как рассчитывается каждое число, указанное непосредственно выше? Они удвоены. Таким образом, двоичные числа начинаются снизу с первой позиции, равной 1. Вторая позиция снизу имеет значение 2, третья позиция 4 и т. д.

Если вы сложите все эти числа (1+2+4+8+16+32+64+128), сможете ли вы угадать, какое число вы получите? 255, наибольшее число, используемое в таблице ASCII. Существует идеальное соответствие между всеми возможными числами от 1 до 255 в таблице ASCII и вычисленными значениями для всех возможных восьмизначных двоичных чисел.

Чтобы вычислить числовое значение двоичного числа, сложите значения для каждой позиции всех единиц в восьмизначном числе. Число 01000001, например, преобразуется в 64 + 1 или 65. Единицы в этом двоичном числе стоят на первой и седьмой позициях, считая снизу вверх или читаясь справа налево. Первой позиции присвоено значение 1, а седьмой позиции присвоено значение 64.

Преобразуем букву в двоичное число

Теперь, когда вы знаете [не очень] секретную формулу для преобразования букв в уникальные числа ASCII в двоичные числа и как создавать двоичные числа, давайте проделаем весь процесс шаг за шагом. Начнем с буквы С.

Во-первых, нам нужно использовать диаграмму ASCII, подобную приведенной ниже, чтобы найти уникальный номер, присвоенный заглавной букве C. Уникальное десятичное число, которое нужно использовать, — 67.

Чтобы преобразовать число для C, 67, в двоичное число:

Помните, как двоичные числа читаются снизу вверх, от первой позиции и значения по умолчанию до верхней позиции и значения по умолчанию, причем каждой из восьми позиций символов присваивается уникальное числовое значение? Какая комбинация значений на приведенной ниже диаграмме будет равна 67?

Двоичные числа со значениями и позициями

Вы правы, если сказали, что значения по умолчанию 1 плюс 2 плюс 64 будут равны 67, числу ASCII для заглавной буквы C. Итак, давайте изменим нули в первой, второй и седьмой позициях на единицы, считая справа налево. осталось. Двоичное число для заглавной буквы C:

Буква C как двоичное число

Можете ли вы расшифровать это двоичное число? Сложите единицы, чтобы получить 64+16+4 или 84. Найдите десятичное число 84 в таблице ASCII, чтобы найти букву, представленную ниже:

Буква T как двоичное число

Если вы преобразовали это двоичное число в заглавную букву T, вы правы. Вот буква A в виде двоичного числа для представления десятичного числа ASCII для A, равного 65:

Буква А как двоичное число

Если мы объединим двоичные числа, которые мы рассмотрели до сих пор, мы можем написать CAT:

01000011 01000001 01010100

Бонус: псевдокод для разработки конвертера двоичных чисел

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

Однако вместо фактического кода мы напишем серию операторов или псевдокод.

Начнем со слова "кошка". Какой процесс нам нужен для автоматического преобразования этих букв в двоичные числа? Вот один из возможных наборов шагов, которые мы могли бы закодировать:

  1. Разбейте слово на отдельные буквы.
  2. Для каждой буквы найдите числовое значение ASCII, сопоставленное с буквой.
  3. Для каждого числового значения ASCII преобразовать в двоичное число.
  4. Для каждого двоичного числа сохраните значение двоичного числа. Если это первое двоичное число, создайте начальное значение двоичного числа; если значение двоичного числа существует, добавьте новое двоичное число в конец значения.

Представьте, если бы мы пропустили последний шаг: каков был бы результат этих шагов? У нас было бы только последнее двоичное число для строчной буквы t в cat. Важно, чтобы мы записывали каждое двоичное число по мере его создания.

Есть другие замечания по поводу этого процесса псевдокодирования? Нам нужно различать заглавные и строчные буквы, не так ли? В противном случае наше преобразование двоичных чисел может преобразовать двоичные числа в буквы ASCII как CAT, cAT или Cat. Наш поиск для сопоставления букв с таблицей ASCII может привести к неправильному числу.

Бонус-бонус: последняя головоломка

Можете ли вы расшифровать фразу в этом наборе двоичных чисел? Помните, что это восемь блоков символов из 1 и 0.

01000011 01101111 01100100 01100101 01101001 01110011 01010000 01101111 01100101 01110100 01110010 01111001

Вот довольно простой способ преобразовать любую букву в двоичное число. Возьмите калькулятор, найдите десятичное значение ASCII для буквы из приведенной выше таблицы, затем посмотрите на диаграмму двоичных чисел, чтобы найти ближайшее значение к десятичному значению. Вычтите ближайшее число из значения по умолчанию в двоичной диаграмме, чтобы получить значение остатка. Найдите ближайшее двоичное значение по умолчанию для остатка. Повторяйте, пока не закончатся двоичные значения.

Если вы сообразительны, вы также заметите, что сумма значений под любым из восьми значений по умолчанию равна на единицу меньше, чем значение: поэтому под двоичным значением 4 находятся значения 2 и 1, которые равны 3. Ниже двоичное значение 8 равно 4, 2 и 1, что равно 7. Это также может помочь преобразовать буквы в двоичные числа. Например, если ваш остаток равен 7, то вы знаете, что нужно поставить 1 на позиции 4, 2 и 1, чтобы создать эту часть вашего двоичного числа.

Чтобы преобразовать двоичные числа в буквы, просто возьмите лист бумаги, ручку или карандаш и сложите двоичные значения всех единиц. Затем найдите общее число в виде десятичного знака ASCII в приведенной выше таблице.

Вот подсказка, которая поможет определить, правильно ли вы решили приведенные выше двоичные числа: в колледже я изучал американскую поэзию, и мне нравится старый слоган, используемый в программном обеспечении для публикации WordPress.

Если вы хотите больше двоичных чисел, ознакомьтесь с нашей статьей о головоломках с двоичными числами Бакуро, которые работают как судоку.

Читайте также: