Теоретическая Информатика
.pdf§ 2. Римские числа |
85 |
2°. П е р е в о д ы р и м с к и х |
ч и с е л |
с и с п о л ь з о в а н и е м и х п р и н ц и п о в з а п и с и
1. Принцип сложения римских цифр.
Если римская цифра стоит перед равной или меньшей, то они складываются.
2. Принцип вычитания римских цифр.
Если римская цифра стоит перед большей, то меньшая вы- читается из большей.
Приведем традиционные алгоритмы перевода, которые, однако, более сложны для реализации, чем предыдущие.
1. Чтение римских чисел.
А л г о р и т м 2 . 1 0 . П е р е в о д р и м с к и х ч и с е л в д е с я т и ч н ы е .
Полагаем целевое десятичное число равным 0.
1.Римское число просматривается слева направо по одной цифре. Если текущая цифра больше или равна следующей, то десятичное значение текущей прибавляется к целевому числу.
2.Если текущая цифра меньше следующей, то из следующей вычитается текущая, и разность прибавляется к целевому числу.
3.Если осталась одна римская цифра, то ее десятичное зна- чение прибавляется к целевому числу.
Например,
MMCMXLVII = 1000 + 1000 + 900 + 40 + 5 + 1 + 1 = 2947.
2. Запись римских чисел.
А л г о р и т м 2 . 1 1 . П е р е в о д д е с я т и ч н ы х ч и с е л
вр и м с к и е .
1.Десятичное число записывается последовательно слева направо максимально возможными римскими цифрами, следя при этом, чтобы римское число не превышало десятичного .
2.Если в шаге 1 получается четыре одинаковых десятичных римских знака подряд, то они сразу заменяются таким же деся- тичным знаком и следующим за ним по величине половинным.
3.Если на шаге 2 десятичный римский знак окажется между двумя половинными, то эти три знака сразу заменяются этим же десятичным и следующим за ним по величине десятичным.
86 |
Глава 2. Символы |
При переводе чисел может потребоваться от 1 до 3 шагов. а. Только первый шаг:
3 = III; 6 = VI; 11 = XI; 22 = XXII.
б. Первый и второй шаги:
4 = IV, а не IIII;
45 = XLV, а не XXXXV;
в. Все три шага:
9 = IX, а не VIIII или VIV;
19 = XIX, а не XVIIII или XVIV.
3°. У п р а ж н е н и я 1. Переведите следующие римские числа в десятичные.
а. MDCLXVI.
б. MMMDCCCLXXXVIII. в. CMXCIX.
г. CDXLIV.
2. Переведите следующие десятичные числа в римские.
а. 39. б. 49. в. 99.
г. 999.
3. Какие из следующих записей являются римскими числа- ми, а какие не является и почему? Переведите римские числа.
а. IIII.
б. IL.
в. XM.
г. DCD.
4. Какие из следующих десятичных чисел можно перевести в римские и почему? Переведите те, которые можно перевести.
а. 4000. б. −10. в. 3,14. г. 1/2.
§ 3. Кодовые таблицы |
87 |
§ 3. Кодовые таблицы
1. Виды кодовых таблиц
1°. А с к и - к о д ы .
О д н о б а й т о в ы е к о д о в ы е т а б л и ц ы Немногочисленные стандартные международные символы,
которые используются на письме,— цифры, английские бук- вы, знаки препинания и специальные символы,— имеют стан- дартную международную кодировку.
Кодирование символов — обозначение символа числом. Кодовая таблица — таблица, в которой собраны закодиро-
ванные символы в порядке их кодов.
Количество цифр в коде определяется количеством байтов, которое используется для кодирования. Например, комбина- ции 8-разрядных двоичных чисел достаточны для кодирова- ния 256 символов. Все стандарты кодирования используют 1, 2, 3 или 4 байта, другими словами, 8, 16, 24 или 32 бита.
Единственным универсальным международным стандар- том являются аски-коды, чья кодовая таблица представлена ниже в виде табл. 2.12. Числовые значения аски-кодов обычно записываются в десятичной системе.
Аски-коды (ASCII) — соответствие между стандартными ме- ждународными символами и 7-битными двоичными числами.
ASCII — American Standard Code for Information Interchange.
Аски-коды кодируются одним байтом, у которого старший, 8-й, разряд всегда равен нулю. Оставшиеся семь битов позво- ляют кодировать не более 128 символов.
Аски-коды эквивалентны официальному междуна- родному стандарту ISO 646.
Этот стандарт действует во всех странах почти на всех ком- пьютерах.
Более того, аски-коды используются для ключевых слов и синтаксиса практически всех современных языков разметки и программирования, а также для всех типов компьютерных дан- ных, обычно редактируемых вручную (таких, как файлы кон-
фигурации и сценарии).
88 |
|
|
|
|
|
|
|
Глава 2. Символы |
|
|
|
|
|
|
|
|
Т а б л и ц а 2 . 1 2 |
||
|
|
|
Аски-коды |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Символ |
|
|
|
|
||
|
|
|
|
Код |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
@ |
|
P |
` |
|
p |
|
|
32 |
48 |
64 |
|
80 |
96 |
|
112 |
|
|
! |
1 |
A |
|
Q |
a |
|
q |
|
|
33 |
49 |
65 |
|
81 |
97 |
|
113 |
|
|
" |
2 |
B |
|
R |
b |
|
r |
|
|
34 |
50 |
66 |
|
82 |
98 |
|
114 |
|
|
# |
3 |
C |
|
S |
c |
|
s |
|
|
35 |
51 |
67 |
|
83 |
99 |
|
115 |
|
|
$ |
4 |
D |
|
T |
d |
|
t |
|
|
36 |
52 |
68 |
|
84 |
100 |
|
116 |
|
|
% |
5 |
E |
|
U |
e |
|
u |
|
|
37 |
53 |
69 |
|
85 |
101 |
|
117 |
|
|
& |
6 |
F |
|
V |
f |
|
v |
|
|
38 |
54 |
70 |
|
86 |
102 |
|
118 |
|
|
' |
7 |
G |
|
W |
g |
|
w |
|
|
39 |
55 |
71 |
|
87 |
103 |
|
119 |
|
|
( |
8 |
H |
|
X |
h |
|
x |
|
|
40 |
56 |
72 |
|
88 |
104 |
|
120 |
|
|
) |
9 |
I |
|
Y |
i |
|
y |
|
|
41 |
57 |
73 |
|
89 |
105 |
|
121 |
|
|
* |
: |
J |
|
Z |
j |
|
z |
|
|
42 |
58 |
74 |
|
90 |
106 |
|
122 |
|
|
+ |
; |
K |
|
[ |
k |
|
{ |
|
|
43 |
59 |
75 |
|
91 |
107 |
|
123 |
|
|
, |
< |
L |
|
\ |
l |
|
| |
|
|
44 |
60 |
76 |
|
92 |
108 |
|
124 |
|
|
- |
= |
M |
|
] |
m |
|
} |
|
|
45 |
61 |
77 |
|
93 |
109 |
|
125 |
|
|
. |
> |
N |
|
^ |
n |
|
~ |
|
|
46 |
62 |
78 |
|
94 |
110 |
|
126 |
|
|
/ |
? |
O |
|
_ |
o |
|
|
|
|
47 |
63 |
79 |
|
95 |
111 |
|
|
|
§ 3. Кодовые таблицы |
89 |
Изучим более подробно состав аски-кодов.
Аски-коды имеют 95 символов с кодами 32—126. Символ с кодом 127 не определен стандартом и не используется. Аски- -коды состоят из четырех групп символов.
1.Цифры. 10 десятичных цифр 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 имеют коды соответственно 48—57.
2.Буквы. Компьютерная индустрия была создана в стране, которая использует самый компактный алфавит в мире. По- этому в аски-кодах находятся только буквы английского язы- ка, что и позволяет под аски-коды отводить только 7 бит коди- рования. Но большие и маленькие буквы имеют разные коды!
а. В аски-кодах находятся 26 прописных (больших) букв ла- тинского (или английского) алфавита
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
с кодами соответственно 65—90.
б. В аски-кодах находятся 26 строчных (маленьких) букв ла- тинского (или английского) алфавита
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
скодами соответственно 97—122.
3.Знаки препинания. 12 самых распространенных междуна- родных знака препинания, в том числе и пробел,
! " ' ( ) , - . : ; ?
скодами соответственно 32—34, 39—41, 44—46, 58—59, 63.
4.Специальные знаки. 21 специальный знак из аски-кодов были приведены выше в табл. 2.5.
Всего получаем 10 + 26 × 2 + 12 + 21 = 95 символов.
Едва только первые компьютеры научились «говорить» по- английски, возникла необходимость добавления других язы- ков. Но 7-битные аски-коды позволяют вести набор фактиче- ски только на трех языках: английском, латинском и суахили.
Наиболее широко используются однобайтовые кодовые таблицы, использующие все 8 разрядов байта. Несмотря на наличие 2-, 3- и 4-байтных кодировок, набор тестов на компь- ютере производится по однобайтовым таблицам, соответст- вующим выбранным языкам.
90 |
Глава 2. Символы |
Однобайтная кодовая таблица — соответствие между симво-
лами и 8-битными двоичными числами.
Однобайтовые кодовые таблицы называются также расши-
ренными аски-кодами.
Первые половины однобайтных кодовых таблиц суть аски- -коды, Вторые половины — это дополнительные 128 символов, которые используются для кодирования национальных алфа- витов с буквами, отличными от английских.
Наблюдается абсолютная совместимость аски-кодов и рас- ширенных аски-кодов. Это выражается в том, что коды симво- лов аски-кодов в 7-битной и 8-битной таблицах в двоичной кодировке абсолютно совпадают. Например, код пробела ра- вен 3210 = 0010 00002 как в аски-кодах, так и в любой однобай- товой кодовой таблице.
Кодовую таблицу удобно рисовать в виде таблицы из 16 строк, как табл. 2.12 и 2.13.
Однобайтная кодовая таблица может в принципе содер- жать 256 символов с десятичными кодами 0—255. Этот деся- тичный диапазон 0—25510 кодов символов кодовой таблицы также записывают в виде двоичного диапазона 0000 0000— 1111 11112 и шестнадцатеричного 00—FF16.
Структура однобайтной кодовой таблицы схематично представлена в табл. 2.13. В приложениях показаны все одно- байтные кодовые таблицы, используемые в операционной системе Windows.
1.Первые два столбца, т. е. первые 32 кода 0—31 отведены под управляющие символы. Эти коды иногда передаются сим- волами, но обычно в таблицах не рисуются.
2.95 символов с кодами 32—126 являются аски-кодами.
3.Остальные 128 кодов 128—255 суть символы националь- ных алфавитов, соответствующих названию кодовой таблицы,
атакже недостающие знаки препинания и другие специаль- ные символы.
Код 127 обычно не соответствует никакому символу.
§ 3. Кодовые таблицы |
|
|
91 |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Т а б л и ц а 2 . 1 3 |
|||
|
|
|
|
Структура однобайтной кодовой таблицы |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Аски-коды |
|
|
Символы национальных алфавитов |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
@ |
P |
|
` |
p |
|
|
|
|
|
|
0224 |
0240 |
32 |
48 |
|
64 |
80 |
|
96 |
112 |
0128 |
0144 |
0160 |
0176 |
0192 |
0208 |
|||
! |
1 |
|
A |
Q |
|
a |
q |
|
|
|
|
|
|
0225 |
0241 |
|
33 |
49 |
|
65 |
81 |
|
97 |
113 |
0129 |
0145 |
0161 |
0177 |
0193 |
0209 |
|||
" |
2 |
|
B |
R |
|
b |
r |
|
|
|
|
|
|
0226 |
0242 |
|
34 |
50 |
|
66 |
82 |
|
98 |
114 |
0130 |
0146 |
0162 |
0178 |
0194 |
0210 |
|||
# |
3 |
|
C |
S |
|
c |
s |
|
|
|
|
|
|
0227 |
0243 |
|
35 |
51 |
|
67 |
83 |
|
99 |
115 |
0131 |
0147 |
0163 |
0179 |
0195 |
0211 |
|||
$ |
4 |
|
D |
T |
|
d |
t |
|
|
|
|
|
|
0228 |
0244 |
|
36 |
52 |
|
68 |
84 |
|
100 |
116 |
0132 |
0148 |
0164 |
0180 |
0196 |
0212 |
|||
% |
5 |
|
E |
U |
|
e |
u |
|
|
|
|
|
|
0229 |
0245 |
|
37 |
53 |
|
69 |
85 |
|
101 |
117 |
0133 |
0149 |
0165 |
0181 |
0197 |
0213 |
|||
& |
6 |
|
F |
V |
|
f |
v |
|
|
|
|
|
|
0230 |
0246 |
|
38 |
54 |
|
70 |
86 |
|
102 |
118 |
0134 |
0150 |
0166 |
0182 |
0198 |
0214 |
|||
' |
7 |
|
G |
W |
|
g |
w |
|
|
|
|
|
|
0231 |
0247 |
|
39 |
55 |
|
71 |
87 |
|
103 |
119 |
0135 |
0151 |
0167 |
0183 |
0199 |
0215 |
|||
( |
8 |
|
H |
X |
|
h |
x |
|
|
|
|
|
|
0232 |
0248 |
|
40 |
56 |
|
72 |
88 |
|
104 |
120 |
0136 |
0152 |
0168 |
0184 |
0200 |
0216 |
|||
) |
9 |
|
I |
Y |
|
i |
y |
|
|
|
|
|
|
0233 |
0249 |
|
41 |
57 |
|
73 |
89 |
|
105 |
121 |
0137 |
0153 |
0169 |
0185 |
0201 |
0217 |
|||
* |
: |
|
J |
Z |
|
j |
z |
|
|
|
|
|
|
0234 |
0250 |
|
42 |
58 |
|
74 |
90 |
|
106 |
122 |
0138 |
0154 |
0170 |
0186 |
0202 |
0218 |
|||
+ |
; |
|
K |
[ |
|
k |
{ |
|
|
|
|
|
|
0235 |
0251 |
|
43 |
59 |
|
75 |
91 |
|
107 |
123 |
0139 |
0155 |
0171 |
0187 |
0203 |
0219 |
|||
, |
< |
|
L |
\ |
|
l |
| |
|
|
|
|
|
|
0236 |
0252 |
|
44 |
60 |
|
76 |
92 |
|
108 |
124 |
0140 |
0156 |
0172 |
0188 |
0204 |
0220 |
|||
- |
= |
|
M |
] |
|
m |
} |
|
|
|
|
|
|
0237 |
0253 |
|
45 |
61 |
|
77 |
93 |
|
109 |
125 |
0141 |
0157 |
0173 |
0189 |
0205 |
0221 |
|||
. |
> |
|
N |
^ |
|
n |
~ |
|
|
|
|
|
|
0238 |
0254 |
|
46 |
62 |
|
78 |
94 |
|
110 |
126 |
0142 |
0158 |
0174 |
0190 |
0206 |
0222 |
|||
/ |
? |
|
O |
_ |
|
o |
|
|
|
|
|
|
|
0239 |
0255 |
|
47 |
63 |
|
79 |
95 |
|
111 |
127 |
0143 |
0159 |
0175 |
0191 |
0207 |
0223 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 Глава 2. Символы
2°. Д в у х б а й т н а я к о д и р о в к а . К о д и р о в к а U T F - 8 В 1991 году был создан консорциум Unicode, опубликовав- ший двухбайтный стандарт Unicode (www.unicode.org). Хотя
набор на компьютере ведется с использованием однобайтных кодовых таблиц, основные символьные данные, такие, как стандартные шрифты Windows и Word или документы в формате Word, хранятся в международной стандартизиро- ванной двухбайтной кодировке.
Двухбайтная кодовая таблица — соответствие между симво-
лами и 16-битными двоичными числами.
Октет — объекты, кодированные 8 битами (1 байтом). Двухбайтную кодовую таблицу называют также уникодов-
ской таблицей, или уникодом (Unicode).
Уникод кодирует 216 = 65536 символов кодами от 0 до
6553510, или от 0000 0000 0000 0000 до 1111 1111 1111 11112, или от 00 00 до FF FF16.
Двухбайтный диапазон кодирования лучше передавать в 16-ричной системе четырьмя цифрами: от 00 00 до FF FF. Та- кую кодировку представляют как серию из 256 октетов по 256 символов в каждом октете (см. рис. 2.14).
Октет 00 |
|
Октет 01 |
|
|
|
|
|
(0100—01FF) |
|
|
|
|
|
(0000—00FF) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Latin |
|
L |
|
L |
Basic Latin |
|
|
|
|
|
|
|
Extended |
|
|
|
|
|
и Latin 1 |
|
|
|
|
|
|
|
A—B |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Октет 04 |
|
Октет 05 |
|
Октет 06 |
|
|
(0400—04FF) |
|
(0500—05FF) |
|
(0600—06FF) |
|
|
|
|
|
|
|
|
L |
Cyrillic |
|
Armenian |
|
Arabic |
|
|
|
|
и Hebrew |
|
|
|
|
|
|
|
|
|
|
|
L |
|
L |
|
L |
L |
|
|
Рис. 2.14. Некоторые октеты уникода |
|
§ 3. Кодовые таблицы |
93 |
Октеты нумеруются первыми двумя из четырех 16-ричных цифр (от 00xx до FFxx), а символы в каждом октете — послед- ними двумя 16-ричными цифрами (от xx00 до xxFF) (рис. 2.14).
Уникод включает все буквенные и иероглифические алфа- виты мира (правда, не все их символы), а также алфавиты большинства мертвых языков, множество специальных и ком- бинированных символов. Кроме того, уникод содержит более 20 тысяч иероглифов, используемых в азиатских языках.
Уникодовский вариант идеографической системы обозна- чают аббревиатурой КЯК (Китайский, Японский, Корейский).
Для того, чтобы однобайтные и двухбайтные коды были совместимы, первые 128 символов уникода являются символа- ми аски-кодов, а следующие 128 символов — символами стан- дарта Latin 1. Таким образом, первые 256 символов уникода
практически совпадают с однобайтной западноевропейской кодировкой (см. прил. 1.8, 1.10—11).
Однако уникод не является полностью совместимым с од- нобайтными кодировками. Отсутствие в нулевом октете уни- кода символов с десятичными кодами 0128—0159 и наличие
символов в этих же столбцах западноевропейской кодовой таблицы здесь ни при чем.
Дело в том, что любой символ в однобайтной кодировке кодируется одним байтом, а в уникоде — двумя. Например,
обычный пробел в однобайтной кодировке кодируется одним байтом 0010 00002 = 2016, а в уникоде — двумя байтами 0000 0000 0010 00002 = 002016. В этом и состоит принципиальная несовместимость уникода с однобайтными кодировками.
Для преодоления этого ограничения и достижения полной совместимости одно- и двухбайтных кодировок были созданы различные промежуточные кодировки. Рассмотрим самую распространенную их них — UTF-8.
UTF-8 — промежуточная кодировка для создания совмес- тимости 16-битного уникода с 7-битными аски-кодами.
UTF — аббревиатура от полного названия кодировки Universal character set Transformation Format.
94 |
Глава 2. Символы |
|
Опишем, каким образом кодировка UTF-8 трансформирует |
два байта уникода в свои один, два или три байта. При этом первые 128 кодов UTF-8 полностью совпадают с аски-кодами.
1.Первые 128 символов с кодами 0000—007F кодируются 1 байтом с теми же кодами 0ххххххх в двоичной кодировке.
2.Символы с кодами 0080—07FF кодируются уже 2 байтами 110ххххх 10хххххх в двоичной кодировке.
3.Остальные символы с кодами 0800—FFFF кодируются 3 байтами 1110хххх 10хххххх 10хххххх в двоичной кодировке .
В кодировке UTF-8 невозможно перепутать, каким количе- ством байтов закодирован символ. Если при чтении данных встречается байт, начинающийся в двоичной кодировке с:
а) 0, то это код аски-кодов; б) 110, то этот и следующий байты кодируют символ с ко-
дом из диапазона 0080—07FF;
в) 1110, то этот и следующие два байта кодируют символ с кодом из диапазона 0800—FFFF.
Если байт в двоичной кодировке начинается с 10, то это второй или третий байт кодировки символа в UTF-8.
3°. У п р а ж н е н и я 2. Изучите стандартные специальные знаки из аски-кодов.
а. Перепишите все 12 стандартных специальных символов из аски-кодов, имеющих отношение к математике.
б. Перепишите все 16 стандартных специальных символов из аски-кодов, имеющих отношение к коммерции.
1. Выпишите коды русских букв.
а. Выпишите десятичные коды прописных А, Б, В, Г, Д и строчных а, б, в, г, д букв в однобайтной кириллической коди- ровке Windows из прил. 1.9 и переведите их в двоичные.
б. Выпишите десятичные и шестнадцатеричные коды про-
писных А, Б, В, Г, Д и строчных а, б, в, г, д букв в уникоде из октета 04 прил. 1.11 и переведите их в двоичные.
в. Выпишите коды UTF-8 прописных А, Б, В, Г, Д и строч- ных а, б, в, г, д букв, воспользовавшись их двоичными кодами.