Кодирование чисел и текста
Порядок нумерации байт
Порядок, в котором последовательность байт представляет информацию в вычислительных устройствах, определяется соглашениями. Например, если используется порядок от старшего к младшему (англ. big-endian), то запись начинается со старшего байта и заканчивается младшим. Если применяется порядок от младшего к старшему (англ. little-endian), то запись начинается с младшего байта и заканчивается старшим.
Пример 20. Число 2,3 в типе данных float (см. пример 15) представляется в виде 40133333 (hex), если используется порядок от старшего к младшему, и в виде 33331340 (hex), для порядка от младшего к старшему.
Представление действительных чисел в компьютере связано с ошибками, которые могут первоначально возникать как результат округления, а затем возрастать во время выполнения арифметических операций над ними. Одним из следствий этого является то, что проверку на точное равенство двух действительных чисел обычно заменяют сравнением абсолютной величины их разности с достаточно малой величиной.
Кодирование текста
Текст - это последовательность символов. Каждый символ кодируется целым числом, поэтому текст представляется в виде набора чисел - кодов символов. Для кодирования символов и их декодирования, т. е. восстановления символов по кодам, применяются таблицы символов.
Кодовые таблицы символов, которые используются в вычислительных устройствах, подчиняются международным стандартам. В основе кодовых таблиц лежит таблица символов ASCII (American Standard Code for Information Interchange), которую ввел Американский государственный институт по стандартизации (ANSI - American National Standard Institute) в 1963 г.
Система кодирования ASCII
Изначально для кодирования символа использовалось 7 разрядов, так что можно было закодировать 128 различных символов. Потом стали использовать 8 разрядов, с помощью которых можно закодировать 256 символов. В системе ASCII используются две таблицы кодирования: базовая, в которой для кодирования символов используются десятичные коды от 0 до 127, и расширенная - с кодами от 128 до 255.
Первые 32 кода (от 0 до 31) базовой таблицы представляют непечатные символы - управляющие коды. Остальные коды представляют буквы английского алфавита, цифры, знаки препинания, основные математические символы и некоторые вспомогательные символы.
В таблице 2.6 представлены печатные символы (Char) базовой таблицы ASCII вместе с их десятичными (Dec) и 16-ричными (Hex) кодами, от 20 (hex) до 7f (hex) включительно.
Изображаемые символы имеют коды от 21 (hex) до 7e (hex). Код 20 (hex) представляет операцию перемещения курсора на 1 позицию вправо, или пробельный символ. Код 7f (hex) соответствует операции удаления предыдущего символа.
Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char |
---|---|---|---|---|---|---|---|---|---|---|---|
32 | 20 | Space | 56 | 38 | 8 | 80 | 50 | P | 104 | 69 | h |
33 | 21 | ! | 57 | 39 | 9 | 81 | 51 | Q | 105 | 6a | i |
34 | 32 | " | 58 | 3a | : | 82 | 52 | R | 106 | 6a | j |
35 | 23 | # | 59 | 3b | ; | 83 | 53 | S | 107 | 6b | k |
36 | 24 | $ | 60 | 3c | < | 84 | 54 | T | 108 | 6c | l |
37 | 25 | % | 61 | 3d | = | 85 | 55 | U | 109 | 6d | m |
38 | 26 | & | 62 | 3e | > | 86 | 56 | V | 110 | 6e | n |
39 | 27 | ' | 63 | 3f | ? | 87 | 57 | W | 111 | 6f | o |
40 | 28 | ( | 64 | 40 | @ | 88 | 58 | X | 112 | 70 | p |
41 | 29 | ) | 65 | 41 | A | 89 | 59 | Y | 113 | 71 | q |
42 | 2a | * | 66 | 42 | B | 90 | 5a | Z | 114 | 72 | r |
43 | 2b | + | 67 | 43 | C | 91 | 5b | [ | 115 | 73 | s |
44 | 2c | , | 68 | 44 | D | 92 | 5c | \ | 116 | 74 | t |
45 | 2d | - | 69 | 45 | E | 93 | 5d | ] | 117 | 75 | u |
46 | 2e | . | 70 | 46 | F | 94 | 5e | ^ | 118 | 76 | v |
47 | 2f | / | 71 | 47 | G | 95 | 5f | _ | 119 | 77 | w |
48 | 30 | 0 | 72 | 48 | H | 96 | 60 | ′ | 120 | 78 | x |
49 | 31 | 1 | 73 | 49 | I | 97 | 61 | a | 121 | 79 | y |
50 | 32 | 2 | 74 | 4a | J | 98 | 62 | b | 122 | 7a | z |
51 | 33 | 3 | 75 | 4b | K | 99 | 63 | c | 123 | 7b | { |
52 | 34 | 4 | 76 | 4c | L | 100 | 64 | d | 124 | 7c | | |
53 | 35 | 5 | 77 | 4d | M | 101 | 65 | e | 125 | 7d | } |
54 | 36 | 6 | 78 | 4e | N | 102 | 66 | f | 126 | 7e | |
55 | 37 | 7 | 79 | 4f | O | 103 | 67 | g | 127 | 7f | Del |
Пример 21. Слово "Science" в системе ASCII кодируется следующим образом:
83 99 105 101 110 99 101 (decimal); 53 63 69 65 6e 63 65 (hex); 01010011011000110110100101100101011011100110001101100101 (двоичный код).
Пример 22. Найдем текст, который представляется двоичным кодом 0111100000100000001010110010000001111001 в системе кодирования ASCII. Разобьем код на группы по 8 знаков. Имеем:
0111 1000 0010 0000 0010 1011 0010 0000 0111 1001,
или 78 20 2b 20 79 (hex). По табл. 2.6 получаем, что код представляет выражение x + y.
Коды от 128 до 255 расширенной таблицы ASCII предназначены для букв национальных алфавитов и других знаков.
Кодирование кириллицы
Для кодирования букв русского алфавита было создано несколько кодовых таблиц. Широко распространенными системами кодирования кириллицы являются КОИ-8, Windows-1251 и CP-866 (фрагменты этих таблиц с десятичными кодами символов приведены ниже). Первоначально была введена система кодирования КОИ-7 (код обмена информации, 7-битовый), затем для кодирования символов стала использоваться расширенная таблица ASCII.
В кодовой таблице КОИ-8 (международное название - KOI8-R) буквы русского алфавита располагаются таким образом, чтобы их позиции соответствовали английским фонетическим аналогам базовой таблицы ( табл. 2.7).
Ю | а | б | ц | д | е | ф | г | х | и | й | к | л | м | н | о |
192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 |
П | я | р | с | т | у | ж | в | ь | ы | з | ш | э | щ | ч | ъ |
208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 |
Ю | А | Б | Ц | Д | Е | Ф | Г | Х | И | Й | К | Л | М | Н | О |
224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 |
П | Я | Р | С | Т | У | Ж | В | Ь | Ы | З | Ш | Э | Щ | Ч | Ъ |
240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 |
В отличие от таблиц Windows-1251 и CP-866, коды строчных букв в таблице КОИ-8 предшествуют кодам прописных.
Кодовая таблица Windows-1251, или CP-1251 (от англ. code page - кодовая страница) разработана корпорацией Microsoft (табл. 2.8).
А | Б | В | Г | Д | Е | Ж | З | И | Й | К | Л | М | Н | О | П |
192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 |
Р | С | Т | У | Ф | Х | Ц | Ч | Ш | Щ | Ъ | Ы | Ь | Э | Ю | Я |
208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 |
А | б | в | г | д | е | ж | з | и | й | к | л | м | н | о | п |
224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 |
Р | с | т | у | ф | х | ц | ч | ш | щ | ъ | ы | ь | э | ю | я |
240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 |