Математики, шпионы и хакеры. Кодирование и криптография - Гомес Жуан (бесплатные книги онлайн без регистрации TXT) 📗
* * *
БАЙТЫ ПАМЯТИ
Емкость памяти компьютера измеряется в единицах, кратных байтам.
Килобайт (КБ): 1024 байтов
Мегабайт (МБ): 1 048 576 байтов
Гигабайт (ГБ): 1 073 741 824 байтов
Терабайт (ТБ): 1099 511627 776 байтов
* * *
Двоичные ASCII-коды приведены для всех используемых в обычном обиходе символов: 26 заглавных букв, 26 строчных букв, 10 цифр, 7 символов пунктуации и некоторых специальных символов. Все они показаны в следующей таблице.
Для двоичного кода каждого символа указано соответствующее десятичное число (в столбце «Дес»):
Фразу «GOTO 2» (команду на языке программирования «Бейсик») компьютер переведет в следующую последовательность двоичных кодов:
Компьютер, таким образом, будет выполнять следующую команду:
010001110100111101010100010011110010000000110010
Шестнадцатеричная система — еще один известный код, используемый в вычислениях. Это система счисления, которая использует 16 уникальных «цифр» (отсюда и название — шестнадцатеричная), в отличие от обычной системы с десятью цифрами (десятичной). Можно сказать, что шестнадцатеричная система является вторым языком компьютеров после двоичной системы. Почему 16 цифр? Напомним, что байт, основная единица хранения информации на компьютере, состоит из восьми битов, которые дают 28 = 256 различных комбинаций из 0 и 1. А 28 = 24 х 24 = 16 х 16. Иными словами, один байт — это комбинация двух шестнадцатеричных чисел.
Шестнадцать «цифр» шестнадцатеричной системы — это традиционные цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и еще шесть символов, выбранных по соглашению: А, В, С, D, Е, F. Числа в шестнадцатеричной системе записываются следующим образом:
От 0 до 15: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, Е, F.
От 16 до 31: 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1А, 1В, 1C, ID, IE, 1F.
От 32 и дальше: 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2А, 2В, 2С…
Эти файлы были созданы компьютером автоматически. Их странные имена — на самом деле шестнадцатеричные числа.
Шестнадцатеричные цифры не различают регистр букв (1Е означает то же самое, что и 1е). В следующей таблице приведены первые 16 двоичных чисел и их шестнадцатеричные эквиваленты:
Чтобы перейти от двоичной записи к шестнадцатеричной, мы сгруппируем биты в четыре группы по четыре цифры, начиная с правого конца, а потом преобразуем каждую четверку цифр в соответствии с предыдущей таблицей. Если количество двоичных цифр не кратно четырем, мы дописываем слева нули. Чтобы перейти от шестнадцатеричной записи к двоичной, мы преобразуем каждую шестнадцатеричную цифру в ее двоичный эквивалент, как показано в следующем примере.
Шестнадцатеричное число принято обозначать так: 9F216 (с нижним индексом 16). Напомним соответствующие двоичные коды:
9F216 = 1001111100102 (здесь нижний индекс 2 указывает, что число выражено в двоичной системе).
Давайте теперь осуществим обратный процесс: число 11101001102 состоит из десяти цифр. Мы дополняем его двумя нулями слева, чтобы получить 12 цифр, которые можно сгруппировать по четыре.
Преобразуем:
11101001102 = 0011 1010 0Н02 = 3А616.
Какая связь между шестнадцатеричными символами и ASCII-кодами? Каждый ASCII-код содержит восемь битов (один байт) информации, поэтому пять ASCII-символов содержат 40 битов (пять байтов), и так как шестнадцатеричный символ содержит четыре бита, мы заключаем, что пять ASCII-символов — это десять шестнадцатеричных символов.
Рассмотрим пример кодирования фразы в шестнадцатеричном коде. Например, возьмем название NotRealCo Ltd. Выполним следующие действия. 1 2 31. Переведем NotRealCo Ltd в двоичные коды в соответствии с таблицей ASCII.
2. Сгруппируем цифры по четыре. (Если длина двоичной строки не кратна четырем, мы добавим нули слева.)
3. Выполним замену по таблице соответствий двоичных и шестнадцатеричных символов.
Фраза NotRealCo Ltd в шестнадцатеричных символах выглядит так:
4Е 6F 74 72 65 61 6С 63 6F 20 48 74 64.
Если система счисления имеет n цифр, то число n называется основанием системы.
На руках человека десять пальцев, поэтому, вероятно, и была придумана десятичная система счисления — счет проводился на пальцах. Десятичное число, например, 7392, представляет собой количество, равное семи тысячам трем сотням девяти десяткам и двум единицам. Тысячи, сотни, десятки и единицы являются степенями основания системы счисления, в данном случае 10. Число 7392, таким образом, может быть выражено следующим образом:
7392 = 7∙103 + 3∙102 + 9∙101 + 2∙100.
Однако по соглашению принято писать только коэффициенты (в нашем примере это 7, 3, 9 и 2). Кроме десятичной системы существует много других систем счисления (на самом деле их общее число бесконечно). В этой главе мы уделили особое внимание двум из них: двоичной системе с основанием 2 и шестнадцатеричной с основанием 16. В двоичной системе счисления коэффициенты имеют только два возможных значения: 0 и 1. Разряды двоичных чисел представляют собой степени двойки. Таким образом, число 110112 может быть записано как
110112 = 1∙24 + 1∙23 + 0∙22 + 1∙21 + 1∙20.
Если мы вычислим выражение, стоящее справа от знака равенства, мы получим 27, что является десятичной формой двоичного числа 11011. Для обратного перехода мы последовательно делим десятичное число на 2 (основание двоичной системы) и записываем остатки, пока не получим частное 0. Двоичное число будет иметь в качестве первой цифры последнее ненулевое частное, а следующими цифрами будут полученные остатки, начиная с последнего. Например, переведем десятичное число 76 в двоичный вид.
Разделим 76 на 2, получим частное 38 и остаток 0.
Разделим 38 на 2, получим частное 19 и остаток 0.
Разделим 19 на 2, получим частное 9 и остаток 1.
Разделим 9 на 2, получим частное 4 и остаток 1.
Разделим 4 на 2, получим частное 2 и остаток 0.
Разделим 2 на 2, получим частное 1 и остаток 0.
Разделим 1 на 2, получим частное 0 и остаток 1.
Остаток от деления записываем в обратном порядке. Таким образом, число 76 выглядит в двоичной системе как 10011002. Этот результат можно проверить по таблице ASCII (в таблице слева приписан дополнительный 0, чтобы получить строки из четырех цифр). Выражение числа, записанного в одной системе счисления, в другой системе называется переходом к другому основанию.