Какое число представлено на следующей картинке?
Верно ли следующее выражение?
101 - 11 = 10
А что такое "почахо"?
Отвечу по порядку.
Десять разогнутых пальцев представляют число 10 или 1023, в зависимости от того, ведется счет в десятичной или двоичной системе (см. Считаем до 1000... на пальцах).
Выражение 101 - 11 = 10
верно, если числа в нем записаны в двоичной системе счисления, и неверно, если это десятичная запись чисел.
"Почахо" - это слово "РОСНАНО", написанное кириллицей и ошибочно прочитанное, как будто оно написано латинскими буквами.
Все три примера демонстрируют различные коды и тот факт, что для правильного восприятия кодов нужно знать, какой именно код перед нами.
Код - это способ представления информации.
Музыкальные звуки кодируются (то есть, представляются) с помощью нотых знаков. Слова на письме кодируются с помощью графических символов: букв или иероглифов. Числа кодируются при помощи цифр, десятичной запятой, знаков плюс и минус. Информация о дорожной ситуации кодируется дорожными знаками; выражаемые нами эмоции - мимикой, жестами, звуками и интонацией; звук, передаваемый по радио - модуляцией напряженности электро-магнитного поля.
Код, или система кодирования, определяет не только набор символов (знаков), но и правила использования этих символов для представления информации. Непосредственно с помощью цифр от 0 до 9 кодируются только десять чисел, от нуля до девяти. А для кодирования других чисел необходимы правила записи многозначных чисел (а также дробных и отрицательных). Для чтения слов "night" или "busy" также недостаточно знать латинские буквы, а нужно знать правила чтения на английском языке и, возможно, исключения из этих правил. Иными словами, необходимо знать правила составления кодовых слов из кодовых символов.
Любое кодированное сообщение (то есть, представление информации в том или ином виде) состоит из кодовых слов. А кодовые слова составляются из кодовых символов.
Кодовые слова - строительные блоки кодированного сообщения.
Напрашивается аналогия с обычным текстом, ведь он тоже состоит из слов естественного языка. А также из пробелов и знаков препинания. И эта аналогия не случайна: слова естественного языка, пробелы и знаки препинания являются кодовыми словами, а обычный текст - кодированным сообщеним, представлющим информацию. Кстати, код, с помощью которого написан данный текст, - письменный русский язык.
Использование любого кода связано с двумя операциями: кодирование и декодирование. Мы кодируем информацию, когда представляем ее как последовательность кодовых слов: записываем музыку нотами, числа - комбинациями цифр, выражаем эмоции мимикой, мысли - речью, устной или письменной. И, наоборот, мы декодируем сообщение, когда извлекаем заложенную в нем информацию: читаем ноты, числа, чужие эмоции, воспринимаем речь.
Системы счисления, с которыми мы познакомились в предыдущих статьях, для представления чисел используют числовые коды: десятичный, шестиричный, двоичный.
Каждый из числовых кодов определяет набор кодовых символов и правила составления кодовых слов из этих символов. Десятичный код использует цифры от 0 до 9 для записи чисел в виде одного и более десятичных разрядов (то есть, разрядов, способных вместить десять разных значений). А двоичный код использует цифры 0 и 1 для записи чисел в виде одного и более двоичных разрядов.
Числовое кодирование, когда одни и те же цифры в разных разрядах имеют разные значения, называется позиционным кодированием. Так, в десятичной записи числа 55 цифра 5 в младшем разряде, или позиции, обозначает пять единиц, а цифра 5 во втором разряде - пять десятков.
До сих пор мы представляли числа только с помощью позиционного числового кодирования, и будем этого придерживаться в дальнейшем. Позиционное числовое кодирование удобно для восприятия, для проведения арифметических операций в столбик, наконец, оно наиболее привычно для нас.
Пример непозиционного числового кодирования - римская запись чисел, использующая римские цифры. Хотите развлечься? Тогда скажите, какое это число: MMXIV? А это: DCCCLXXXVIII? Если справились, тогда попробуйте вычесть из него XLVII (можно в столбик)!
Далее рассмотрим, как с помощью позиционных числовых кодов можно представлять самую разную информацию. Представляемая информация совсем не обязательно должна быть числовой по своей природе.
Начнем с простейшего случая (он же самый фундаментальный). Один двоичный разряд содержит 0 или 1. Этими значениями можно закодировать любые две отличные друг от друга величины или состояния: "вкл." и "выкл.", "светло" и "темно", "достаточно" и "недостаточно", "занято" и "свободно", "истина" и "ложь". Значения, которые мы приписываем кодовым словам 0 и 1, зависят от нашего желания.
Двоичный разряд называется бит (от английсикх слов binary digit).
Для кодирования более чем двух значений нам понадобится более одного бита. Два бита позволяют закодировать 4 различных значения (22 = 4). Например:
0 | 00 | север |
1 | 01 | восток |
2 | 10 | юг |
3 | 11 | запад |
или
0 | 00 | я |
1 | 01 | ты |
2 | 10 | он |
3 | 11 | она |
Здесь, параллельно с двоичными кодовыми словами представлены также десятичные - для полноты восприятия и для напоминания о том, что для кодирования годятся числа с любым основанием.
Если мы захотим закодировать семь цветов радуги, нам понадобится поставить их в соответствие семи разным числам:
0 | 000 | красный |
1 | 001 | оранжевый |
2 | 010 | желтый |
3 | 011 | зеленый |
4 | 100 | голубой |
5 | 101 | синий |
6 | 110 | фиолетовый |
Нам потребовались три бита для двоичного кодирования семи цветов радуги. При этом еще одно трехразрядное двоичное кодовое слово, 111
, осталось неиспользованным. Задействуем и его, приняв, что 0 обозначает отсутствие информации о цвете:
0 | 000 | нет информации |
1 | 001 | красный |
2 | 010 | оранжевый |
3 | 011 | желтый |
4 | 100 | зеленый |
5 | 101 | голубой |
6 | 110 | синий |
7 | 111 | фиолетовый |
Все просто, не так ли? В таком случае, какие три цвета закодированы в следующем сообщении?
001011100
Ответьте на этот вопрос, прежде чем читать дальше.
А если прочитать трехразрядные кодовые слова справа налево? Последовательность цветов будет иной: 100
- зеленый, 011
- желтый, 001
- красный. Это еще одно напоминание о том, что, кроме таблицы кодов, нужно определить и придерживаться правил кодирования-декодирования. Одно из них определяет направление записи кодированного сообщения, справа налево или слева направо.
В рассмотренных примерах числовые коды кодируют значения или "смыслы" из некоторой предметной области: стороны света, цвета радуги. Но существует и другой подход к кодированию, когда кодовые слова соответствуют не смыслам, а символам (знакам) из некоторого набора символов.
Набор символов принято называть алфавитом. В случае кодирования символов, система кодирования сопоставляет кодовые слова символам исходного алфавита. Заметим, что сами кодовые слова также состоят из символов некоторого алфавита, назовем его кодовым.
Примером кодирования символов, а не смыслов, может быть кодирование букв русского алфавита. В соответствие буквам поставим двухразрядные десятичные числа от 01
до 33
, а в соответствие пробелу - число 34
.
01 | а | 18 | р |
02 | б | 19 | с |
03 | в | 20 | т |
04 | г | 21 | у |
05 | д | 22 | ф |
06 | е | 23 | х |
07 | ё | 24 | ц |
08 | ж | 25 | ч |
09 | з | 26 | ш |
10 | и | 27 | щ |
11 | й | 28 | ь |
12 | к | 29 | ы |
13 | л | 30 | ъ |
14 | м | 31 | э |
15 | н | 32 | ю |
16 | о | 33 | я |
17 | п | 34 | <пробел> |
Здесь тридцать три строчные русские буквы и пробел - символы исходного алфавита. А соответствующие им кодовые слова от 01
до 34
составлены из символов кодового алфавита - цифр от 0 до 9.
Теперь фразу "привет мир" можем записать так (проверьте!):
17181003062034141018
Для полноценного кодирования русскоязычного текста приведенной кодовой таблицы явно недостаточно: в ней нет знаков препинания и прописных букв. Также в ней нет цифр.
Для представления 33 прописных букв, 10 цифр, 9 знаков препинания .,;:!?-""
и скобок ()
нам понадобится еще 54 кодовых слова. Для кодирования текста нам также нужны коды, обозначающие конец строки и отступ, например, для красной строки. И неплохо было бы иметь коды для знаков арифметических операций, фигурных {}
и квадратных скобок []
, а также таких символов, как №
, %
, $
и некоторых других.
Примерно так и рассуждали создатели первых кодировок для хранения в компьютере текстовой информации. В результате их усилий родился стандарт ASCII (American Standard Code for Information Interchange) - американский стандартный код для обмена информацией. ASCII использует 128 чисел, от 0 до 127, для кодирования букв латинского алфавита, цифр, знаков препинания и ряда специальных символов:
0 | NULL | 32 | Space | 64 | @ | 96 | ` |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | “ | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | ‘ | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | TAB | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DC1 | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | S | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | ETB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | 124 | | | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ~ |
31 | US | 63 | ? | 95 | _ | 127 | DEL |
Все современные компьютерные программы понимают и используют кодировку ASCII. Подробнее познакомиться с таблицей ASCII можно в Википедии.
Кодирование текста при помощи ASCII предполагает, что каждое кодовое слово имеет фиксированную длину. Например, если мы запишем "Hello World" с помошью десятичных кодов ASCII, мы должны сделать этот так:
072101108108111032087111114108100
Каждое кодовое слово здесь имеет три разряда. Значит, мы всегда можем сказать, где кончается одно кодовое слово и начинается другое, что и позволяет однозначно декодировать текст:
072 101 108 108 111 032 087 111 114 108 100
H e l l o W o r l d
Что касается кодирования букв русского алфавита для хранения в компьютере, то эта поразительная тема требует отдельной статьи!
А из этой статьи мы узнали
- о вездесущности кодов - они повсюду, где в том или ином виде представлена какая-то информация,
- о двух типах кодов: первый кодирует смыслы, а второй - символы,
- о том, что десятичная запись чисел, которой нас научили в первом классе, есть десятичный позиционный числовой код,
- и что рассмотренные в предыдущих статьях способы записи чисел по различным основаниям - варианты позиционного числового кода.
Кроме того, мы разработали несколько кодов для кодирования смыслов и символов. Не боги горшки обжигают!
В заключение, три вопроса в качестве напоминания о том, что для правильной интерпретации закодированного сообщения нужно знать, какой именно код использован для его кодирования:
-
Сколько будет
5 + 3
, если известно, что '+' означает операцию сложения, а числа записаны НЕ в десятичном коде? - Что такое "АБЫРВАЛГ"?
- Если индиец в ответ на ваш вопрос покачал головой из стороны в сторону, что он имел в виду?
Комментариев нет:
Отправить комментарий