Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_1 курс_ИТ_34 ч.doc
Скачиваний:
23
Добавлен:
15.09.2019
Размер:
975 Кб
Скачать
☆

Преобразование двоичных чисел в десятичные

Допустим, вам дано двоичное число 110001. Для перевода в десятичное просто запишите его справа налево как сумму по разрядам следующим образом:

.

Можно записать это в виде таблицы следующим образом:

512

256

128

64

32

16

8

4

2

1

1

1

0

0

0

1

+32

+16

+1

Точно так же, начиная с двоичной точки, двигайтесь справа налево. Под каждой двоичной единицей напишите её эквивалент в строчке ниже. Сложите получившиеся десятичные числа. Таким образом, двоичное число 110001 равнозначно десятичному 49.

Преобразование десятичных чисел в двоичные

Допустим, нам нужно перевести число 19 в двоичное. Вы можете воспользоваться следующей процедурой :

19 /2 = 9 с остатком 1

9 /2 = 4 c остатком 1

4 /2 = 2 с остатком 0

2 /2 = 1 с остатком 0

1 /2 = 0 с остатком 1

Шестнадцатеричная система счисления (шестнадцатеричные числа) — позиционная система счисления по целочисленному основанию 16. Обычно в качестве шестнадцатеричных цифр используются десятичные цифры от 0 до 9 и латинские буквы от A до F для обозначения цифр от 10 до 15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).

Широко используется в низкоуровневом программировании и вообще в компьютерной документации, поскольку в современных компьютерах минимальной единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами. Такое использование началось с системы IBM/360, где вся документация использовала шестнадцатеричную систему, в то время как в документации других компьютерных систем того времени (даже с 8-битными символами, как, например, PDP-11 или БЭСМ-6) использовали восьмеричную систему.

В стандарте Юникода номер символа принято записывать в шестнадцатеричном виде, используя не менее 4 цифр (при необходимости — с ведущими нулями).

Перевод чисел из шестнадцатеричной системы в десятичную

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

Например, требуется перевести шестнадцатеричное число 5A3 в десятичное. В этом числе 3 цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:

5A316=3·160+10·161+5·162 =3·1+10·16+5·256=3+160+1280=144310

Перевод чисел из двоичной системы в шестнадцатеричную

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

Например:

0101101000112=0101 1010 0011=5A316

Таблица перевода чисел

0hex

=

0dec

=

0oct

0

0

0

0

1hex

=

1dec

=

1oct

0

0

0

1

2hex

=

2dec

=

2oct

0

0

1

0

3hex

=

3dec

=

3oct

0

0

1

1

4hex

=

4dec

=

4oct

0

1

0

0

5hex

=

5dec

=

5oct

0

1

0

1

6hex

=

6dec

=

6oct

0

1

1

0

7hex

=

7dec

=

7oct

0

1

1

1

8hex

=

8dec

=

10oct

1

0

0

0

9hex

=

9dec

=

11oct

1

0

0

1

Ahex

=

10dec

=

12oct

1

0

1

0

Bhex

=

11dec

=

13oct

1

0

1

1

Chex

=

12dec

=

14oct

1

1

0

0

Dhex

=

13dec

=

15oct

1

1

0

1

Ehex

=

14dec

=

16oct

1

1

1

0

Fhex

=

15dec

=

17oct

1

1

1

1

Двенадцатеричная система счисления — позиционная система счисления с целочисленным основанием 12. Используются цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B. Существует другая система обозначения, где для недостающих цифр используют не A и B, а t от (англ. ten десять) и e (от англ. eleven одиннадцать).

Число 12 могло бы быть очень удобным основанием системы счисления, так как оно делится без остатка на 2, 3, 4 и 6. Число же 10 — основание десятеричной системы счисления без остатка делится лишь на 2 и 5.

Двенадцатеричная система счисления возникла в древнем Шумере. Предполагается, что такая система возникала исходя из количества фаланг пальцев на руке при подсчёте их большим пальцем той же руки. Фаланги пальцев использовались как простейшие счёты (текущее состояние счёта засекалось большим пальцем), вместо загибания пальцев, принятого в европейской цивилизации. Некоторые народы Нигерии и Тибета используют двенадцатеричную систему счисления в настоящее время.

Так же существует гипотеза, что до 12 считали сидя, загибая не только 10 пальцев рук, но и 2 ноги. Хотя, возможно такое случалось, когда европейцам приходилось сталкиваться с восточным двенадцатеричным счётом.

Двенадцатые доли часто встречались и в европейских системах мер. У римлян стандартной дробью была унция (1/12). 1 английский пенс = 1/12 шиллинга, 1 дюйм = 1/12 фута и т. д.

Переход на двенадцатеричную систему счисления предлагался неоднократно. В XVII веке её сторонником был знаменитый французский естествоиспытатель Бюффон. Вольтер в «Истории Карла XII» утверждает, что этот монарх готовил указ о переходе на двенадцатеричную систему [1]. Во времена Великой французской революции была учреждена «Революционная комиссия по весам и мерам», которая длительный период рассматривала подобный проект, однако усилиями Лагранжа и других противников реформы дело удалось свернуть. В 1944 году было организовано «Двенадцатеричное общество Америки» (The Duodecimal Society of America), объединившее активных сторонников одноимённой системы счисления. Однако, главным аргументом против этого всегда служили огромные затраты и неизбежная путаница при переходе.

Элементом двенадцатеричной системы в современности может служить счёт дюжинами. Первые три степени числа 12 имеют собственные названия:

  • 1 дюжина = 12 штук

  • 1 гросс = 12 дюжин = 144 штуки

  • 1 масса = 12 гроссов = 1728 штук

Стандарты

ASCII (англ. American Standard Code for Information Interchange — американский стандартный код для обмена информацией; по-американски произносится [э́ски], тогда как в Великобритании чаще произносится [а́ски]; по-русски произносится также [а́ски] или [аски́]).

ASCII представляет собой кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов. Изначально разработанная как 7-битная, с широким распространением 8-битного байта ASCII стала восприниматься как половина 8-битной. В компьютерах обычно используют расширения ASCII с задействоваyной второй половиной байта

Наложение символов

Благодаря символу BS (возврат на шаг) на принтере можно печатать один символ поверх другого. В ASCII было предусмотрено добавление таким образом диакритики к буквам, например:

a BS ' → á

a BS ` → à

a BS ^ → â

o BS / → ø

c BS , → ç

n BS ~ → ñ

Примечание: в старых шрифтах апостроф ' рисовался с наклоном влево, а тильда ~ была сдвинута вверх, так что они как раз подходили на роль акута и тильды сверху.

Если на символ накладывается тот же символ, то получается эффект жирного шрифта, а если на символ накладывается подчёркивание, то получается подчёркнутый текст.

a BS a → a

a BS _ → a

Примечание: это используется, например, в справочной системе man.

Национальные варианты ASCII

Стандарт ISO 646 (ECMA-6) предусматривает возможность размещения национальных символов на месте @ [ \ ] ^ ` { | } ~. В дополнение к этому, на месте # может быть размещён £, а на месте $ — ¤. Такая система хорошо подходит для европейских языков, где нужны лишь несколько дополнительных символов. Вариант ASCII без национальных символов называется US-ASCII, или «International Reference Version».

Для некоторых языков с нелатинской письменностью (русского, греческого, арабского, иврита) существовали более радикальные модификации ASCII. Одним из вариантов был отказ от строчных латинских букв — на их месте размещались национальные символы (для русского и греческого — только заглавные буквы). Другой вариант — переключение между US-ASCII и национальным вариантом «на лету» с помощью символов SO (Shift Out) и SI (Shift In) — в этом случае в национальном варианте можно полностью устранить латинские буквы и занять всё пространство под свои символы. См. также КОИ-7.

Впоследствии оказалось удобнее использовать 8-битные кодировки (кодовые страницы), где нижнюю половину кодовой таблицы (0—127) занимают символы US-ASCII, а верхнюю (128—255) — дополнительные символы, включая набор национальных символов. В Юникоде первые 128 символов тоже совпадают с соответствующими символами US-ASCII.

Верхняя половина таблицы в настоящее время активно используется для представления кириллических символов, и её вариации (КОИ-8, Windows-1251 и другие) доставляют основные проблемы с кодировками.

Кодировка

Символ 0x5e в первой версии стандарта ASCII (1963) соответствовал стрелке вверх, а символ 0x5f — стрелке влево. Стандарт ECMA-6 (1965) заменил их на знак вставки (используемый также в роли циркумфлекса) и нижнюю черту (подчёркивание) соответственно.

Управляющие символы

Основная статья: Управляющие символы

Поскольку ASCII изначально предназначался для обмена информацией (по телетайпу), в нём, кроме информационных символов, используются символы-команды для управления связью. Это обычный набор спецсигналов, применявшийся и в других докомпьютерных средствах обмена сообщениями (азбука Морзе, семафорная азбука), дополненный с учётом специфики устройства.

(После названия каждого символа указан его 16-ричный код)

NUL, 00 — Null, пустой. Всегда игнорировался. На перфолентах 1 представлялась дырочкой, 0 — отсутствием дырочки. Поэтому пустые части перфоленты до начала и после конца сообщения состояли из таких символов. Сейчас используется во многих языках программирования как конец строки. (Строка понимается как последовательность символов.) В некоторых операционных системах NUL — последний символ любого текстового файла.

SOH, 01 — Start Of Heading, начало заголовка.

STX, 02 — Start of Text, начало текста. Текстом называлась часть сообщения, предназначенная для печати. Адрес, контрольная сумма и т. д. входили или в заголовок, или в часть сообщения после текста.

ETX, 03 — End of Text, конец текста. Здесь телетайп прекращал печатать. Использование символа Ctrl-C, имеющего код 03, для прекращения работы чего-то (обычно программы), восходит ещё к тем временам.

EOT, 04 — End of Transmission, конец передачи. В системе UNIX Ctrl-D, имеющий тот же код, означает конец файла при вводе с клавиатуры.

ENQ, 05 — Enquire. Прошу подтверждения.

ACK, 06 — Acknowledgement. Подтверждаю.

BEL, 07 — Bell, звонок, звуковой сигнал. Сейчас тоже используется. В языках программирования C и C++ обозначается \a.

BS, 08 — Backspace, возврат на один символ. Сейчас стирает предыдущий символ.

TAB, 09 — Tabulation. Обозначался также HT — Horizontal Tabulation, горизонтальная табуляция. Во многих языках программирования обозначается \t .

LF, 0A — Line Feed, перевод строки. Сейчас в конце каждой строчки текстового файла ставится либо этот символ, либо CR, либо и тот и другой (CR, затем LF), в зависимости от операционной системы. Во многих языках программирования обозначается \n и при выводе текста приводит к переводу строки.

VT, 0B — Vertical Tab, вертикальная табуляция.

FF, 0C — Form Feed, новая страница.

CR, 0D — Carriage Return, возврат каретки. Во многих языках программирования этот символ, обозначаемый \r, можно использовать для возврата в начало строчки без перевода строки. В некоторых операционных системах этот же символ, обозначаемый Ctrl-M, ставится в конце каждой строчки текстового файла перед LF.

SO, 0E — Shift Out, измени цвет ленты (использовался для двуцветных лент; цвет менялся обычно на красный). В дальнейшем обозначал начало использования национальной кодировки.

SI, 0F — Shift In, обратно к Shift Out.

DLE, 10 — Data Link Escape, следующие символы имеют специальный смысл.

DC1, 11 — Device Control 1, 1-й символ управления устройством — включить устройство чтения перфоленты.

DC2, 12 — Device Control 2, 2-й символ управления устройством — включить перфоратор.

DC3, 13 — Device Control 3, 3-й символ управления устройством — выключить устройство чтения перфоленты.

DC4, 14 — Device Control 4, 4-й символ управления устройством — выключить перфоратор.

NAK, 15 — Negative Acknowledgment, не подтверждаю. Обратно к Acknowledgment.

SYN, 16 — Synchronization. Этот символ передавался, когда для синхронизации было необходимо что-нибудь передать.

ETB, 17 — End of Text Block, конец текстового блока. Иногда текст по техническим причинам разбивался на блоки.

CAN, 18 — Cancel, отмена (того, что было передано ранее).

EM, 19 — End of Medium, кончилась перфолента и т. д.

SUB, 1A — Substitute, подставить. Следующий символ — другого цвета или из дополнительного набора символов. Сейчас Ctrl-Z используется как конец файла при вводе с клавиатуры в системах DOS и Windows. У этой функции нет никакой очевидной связи с символом SUB.

ESC, 1B — Escape. Следующие символы — что-то специальное.

FS, 1C — File Separator, разделитель файлов.

GS, 1D — Group Separator, разделитель групп.

RS, 1E — Record Separator, разделитель записей.

US, 1F — Unit Separator, разделитель юнитов. То есть поддерживалось 4 уровня структуризации данных: сообщение могло состоять из файлов, файлы из групп, группы из записей, записи из юнитов.

DEL, 7F — Delete, стереть последний символ. Символом DEL, состоящим в двоичном коде из всех единиц, можно было забить любой символ. Устройства и программы игнорировали DEL так же, как NUL. Код этого символа происходит из первых текстовых процессоров с памятью на перфоленте: в них удаление символа происходило забиванием его кода дырочками (обозначавшими логические единицы).

Структурные свойства таблицы

Цифры 0—9 представляются своими двоичными значениями (например, 5=01012), перед которыми стоит 00112. Таким образом, двоично-десятичные числа (BCD) превращаются в ASCII-строку с помощью простого добавления слева 00112 к каждому двоично-десятичному полубайту.

Буквы A-Z верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на диапазон. Буквы представляются своими порядковыми номерами в алфавите, записанными в 2-ичной системе счисления, перед которыми стоит 0102 (для букв верхнего регистра) или 0112 (для букв нижнего регистра).

Представление ASCII в компьютерах

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

На компьютерах системы IBM/360, однако, в случае использования ASCII применялся другой метод: 6-й бит (если считать самый младший бит первым) перемещается в 7-й, а бывший 7-й «раздваивается» и копируется и в 8-й бит, и в 6-й. Получается такая таблица

На тех компьютерах, где минимально адресуемой единицей памяти было 36-битное слово, поначалу использовали 6-битные символы (1 слово = 6 символов). После перехода на ASCII на таких компьютерах в одном слове стали размещать либо 5 семибитных символов (1 бит оставался лишним), либо 4 девятибитных символа.

Windows-1251

Windows-1251 — набор символов и кодировка, являющаяся стандартной 8-битной кодировкой для всех русских версий Microsoft Windows. Пользуется довольно большой популярностью. Была создана на базе кодировок, использовавшихся в ранних «самопальных» русификаторах Windows в 1990—1991 гг. совместно представителями «Параграфа», «Диалога» и российского отделения Microsoft. Первоначальный вариант кодировки сильно отличался от представленного ниже в таблице (в частности, там было значительное число «белых пятен»).

Windows-1251 выгодно отличается от других 8‑битных кириллических кодировок (таких как CP866, KOI8-R и ISO 8859-5) наличием практически всех символов, использующихся в русской типографике для обычного текста (отсутствует только значок ударения); она также содержит все символы для близких к русскому языку языков: украинского, белорусского, сербского и болгарского.

Имеет два недостатка:

строчная буква «я» имеет код 0xFF (255 в десятичной системе). Она является «виновницей» ряда неожиданных проблем в программах без поддержки чистого 8-го бита, а также (гораздо более частый случай) использующих этот код как служебный (в CP437 он обозначает «неразрывный пробел», в Windows-1252 — ÿ, оба варианта практически не используются; число же -1, в дополнительном коде длиной 8 бит представляющееся числом 255, часто используется в программировании как специальное значение, например, индикатор конца файла EOF часто представляется значением -1).

отсутствуют символы псевдографики, имеющиеся в CP866 и KOI8 (хотя для самих Windows, для которых она предназначена, в них не было нужды, это делало несовместимость двух использовавшихся в них кодировок заметнее).

Кодировка Windows-1251 (синоним CP1251)

KOI8

КОИ-8 (код обмена информацией, 8 битов), KOI8 — восьмибитовая ASCII-совместимая кодовая страница, разработанная для кодирования букв кириллических алфавитов.

Существует также семибитовая версия кодировки, не полностью совместимая с ASCII — КОИ-7. КОИ-7 и КОИ-8 описаны в ГОСТ 19768-74 (сейчас недействителен, на сайте Федерального агентства по метрологии о нём даже не осталось упоминания), более новая версия ГОСТ 19768-93 нормирует совсем другие значения кодов).

Разработчики КОИ-8 поместили символы русского алфавита в верхней части кодовой таблицы таким образом, что позиции кириллических символов соответствуют их фонетическим аналогам в английском алфавите в нижней части таблицы. Это означает, что если в тексте, написанном в КОИ-8, убирать восьмой бит каждого символа, то получается «читаемый» текст, хотя он и написан латинскими символами. Например, слова «Русский Текст» превратились бы в «rUSSKIJ tEKST». Как побочное следствие, символы кириллицы оказались расположены не в алфавитном порядке.

Существует несколько вариантов кодировки КОИ-8 для различных кириллических алфавитов, расширяющие определённых кодов (общий диапазон 192-255 с 32 русскими буквами в двух регистрах остаётся неизменным во всех вариантах). Русский алфавит описывается в кодировке KOI8-R, украинский — в KOI8-U.

KOI8-R стал фактически стандартом для русской кириллицы в 1990-х годах в юникс-подобных операционных системах и электронной почте.