Текстовая информация
При хранении в компьютере любой текст (документ, статья, книга) рассматривается как линейная последовательность символов. Причем промежуток между отдельными словами — пробел, переход на следующую строчку, переход на следующую страницу — также могут рассматриваться как некие специальные символы. Каждому символу из этой последовательности ставится в соответствие конкретный двоичный код, состоящий ровно из восьми двоичных разрядов. Таким образом, код каждого символа текста занимает ровно один байт памяти. И следовательно, текст целиком занимает столько байт памяти машины, из скольких символов он состоит (включая все символы текста — пробелы, знаки препинания, специальные знаки перехода на новую строчку, на новую страницу и т. д.). Списки всех используемых при записи текстов символов и соответствующих им двоичных кодов образуют так называемые кодовые таблицы. В практике программирования применяются различные кодовые таблицы. Наиболее часто используется кодовая таблица ASCII (American Standart Code for Information Interchange — стандартный американский код для обмена информацией), которая в настоящее время фактически стала общемировым стандартом. В таблицу входят коды строчных и заглавных латинских букв, коды для цифр, знаков препинания, различных математических символов, символов, которыми можно рисовать в текстах таблицы и т. д. А всего в ней зафиксированы коды для 128 различных символов. Список этих символов и соответствующие им восьмиразрядные (то есть состоящие из восьми двоичных разрядов, цифр) двоичные коды образуют основную (базовую) кодовую таблицу ASCII. Но, как было выяснено ранее, один байт может содержать 256 различных двоичных кодов, состоящих из восьми бит. Это означает, что в стандарте ASCII задействована только половина возможных кодов. Имеются различные расширения основной кодовой таблицы ASCII, в которых задаются коды еще для 128 символов, в том числе для и символов различных национальных алфавитов. Фрагмент одного из расширений кодовой таблицы ASCII, включающий буквы русского алфавита — кириллицы, приведен в табл. 4.2.
Таблица 4.2. Фрагмент кодовой таблицы
В качестве примера кодировки получим машинный код текста, состоящего из одного слова «КОМПЬЮТЕР». Этот текст состоит из 9 символов, следовательно, для его хранения требуется 9 байтов памяти. Используя табл. 4.2, для каждого символа легко получить соответствующий ему двоичный код. Остается только записать найденные коды в группу подряд расположенных байтов памяти. В таблице 4.3 приведен полученный таким образом машинный код этого текста. В первой строке таблицы указаны порядковые номера байтов памяти, в которых записан текст, во второй — символы, из которых он состоит, в третьей — машинные, двоичные коды, а в четвертой — шестнадцатеричные коды этих символов. Таким образом, текст «КОМПЬЮТЕР» в вычислительной машине представлен двоичным кодом: 1000 1010 1000 1110 1000 1100 1000 1111 1001 1100 1000 1110 1001 0010 1000 0101 1001 00002.
Таблица 4.3. Машинный код текста «КОМПЬЮТЕР»
Этот код можно сокращенно записать в шестнадцатеричном виде:
82 8Е 8С 8F 9С 9Е 92 85 9016. Следует понимать, что пробелы между четверками двоичных цифр и парами шестнадцатеричных вставляются только для удобства их восприятия, чтения человеком, и в память компьютера они, естественно, не записываются. Обратите внимание на то, что в табл. 4.2 приведены коды заглавных букв. Строчные буквы имеют другие коды. Например, код буквы «а» имеет вид 101000002, в то время как код буквы «А» — 1000 00002. Не случайно рассматриваемое слово записано именно в таком виде — машинный код слова «КОМПЬЮТЕР» отличается от машинного кода слова «компьютер». Заметим, что знать кодовую таблицу наизусть совершенно не нужно. Только в очень редких случаях приходится пользоваться приведенными в ней кодами символов. Все необходимые преобразования от символов к их кодам и назад — от кодов к символам — производятся машиной автоматически. Однако необходимо помнить о том, что существует много различных кодовых таблиц и что различные программы могут использовать для записи текстов различные кодовые таблицы. А в разных кодовых таблицах один и тот же код соответствует разным символам. Так, например, двоичный код 1000 10102 соответствует символу «К» только в так называемой «Гост-альтернативной» кодовой таблице. Именно ее фрагмент приведен в табл. 4.2. А в другой популярной кодовой таблице с названием «Windows 1251» этот же двоичный код служит для обозначения символа «Љ». Следовательно, текст, записанный какой-либо программой в одной кодовой таблице, может быть полностью искажен при его чтении с помощью другой программы. Если приведенный выше код слова «КОМПЬЮТЕР» попытаться прочитать с помощью программы, которая использует кодовую таблицу «Windows 1251», то этот код будет представлен «словом» «ЉЋЊЏњћ'... ђ». Правомерно задать вопрос: «А зачем нужны различные кодовые таблицы, раз они могут приводить к такого рода путанице?». Дело в том, что если учесть все возможные буквы, встречающиеся в национальных алфавитах европейских стран, все возможные символы, которые встречаются в математических и других специальных текстах, не говоря уже об алфавитах азиатских языков, таких как японский, корейский, китайский, то двухсот пятидесяти шести символов, которые могут быть закодированы описанным выше способом, окажется явно мало. Поэтому и разработано такое большое количество различных кодировочных таблиц.
Необходимо отметить, что в последнее время все шире используется кодовая таблица с названием UNICODE (UNIversal CODE — универсальный код), в которой для кода одного символа отводится два байта, а не один, как в рассмотренных выше таблицах. Сразу же бросается в глаза очевидный недостаток этой кодировки -требуется ровно в два раза больше места в памяти, чем при записи в однобайтных кодировках. Так, для слова «КОМПЬЮТЕР» теперь потребуется восемнадцать байтов, а не девять, как это было ранее. Но в связи с тем, что память становится все более и более дешевой, этот недостаток становится все менее и менее значимым. Кроме того, он с лихвой покрывается очевидным преимуществом: с помощью двух байтов, то есть шестнадцати разрядов, можно закодировать 216=65 536 различных символов, а не 28=256 символов однобайтных кодировок. Такого количества различных символов вполне достаточно для того, чтобы представить практически все встречающиеся во всевозможных текстах символы. Использование кодовых таблиц для представления различных текстов в памяти компьютера решает только часть проблемы. Если более внимательно посмотреть на текст, скажем, в газете, журнале или книге, то можно заметить, что практически любой текст содержит те или иные элементы оформления. Символы, из которых состоит текст, могут иметь разные размеры и разное начертание. Они могут быть наклонными, подчеркнутыми, выделенными жирным шрифтом и т. д. По-разному могут быть оформлены абзацы и страницы текста. На странице могут находиться номера, колонтитулы, сноски. Все эти, а также и многие другие элементы оформления текста при его записи в память компьютера также нуждаются в определенной кодировке. Существует много различных форматов — конкретных способов кодирования символов текста и фиксации элементов его оформления. В частности, можно упомянуть общепринятый, «понятный» подавляющему большинству работающих с текстами программ формат ТХТ (от слова text — текст). Этот формат основывается на одной из кодовых таблиц для представления символов текста и практически не содержит никаких элементов его оформления. Заметим, что именно поэтому с этим форматом могут работать очень многие программы. Значительно более сложным, но также довольно популярным является формат RTF (Rich Text Format — богатый текстовый формат), который содержит очень много различных возможностей по оформлению текстов.
Числовая информация В тех случаях, когда над числовыми данными приходится выполнять какие-либо математические операции, например сложение, вычитание, умножение и т. д., применяются особые принципы кодирования. Так, кодом целого положительного десятичного числа считается его запись в двоичной системе счисления, то есть равное ему двоичное число. Например, кодом десятичного числа +3710 является двоичное число 0010 01012 (или 2516). А число +98410 выглядит как 0000 0011 1101 10012 (или 03 D916). Для отрицательных целых чисел, а также для положительных и отрицательных дробных чисел используются более сложные методы кодирования. Для перехода от десятичной системы счисления к двоичной и назад — от двоичной к десятичной — применяются достаточно сложные специальные правила, на которых мы останавливаться не будем, так как в подавляющем большинстве ситуаций эти переходы осуществляются автоматически. В случае кодирования числовой информации одного байта для записи числа, как правило, бывает недостаточно, так как с его помощью можно записать числа только из диапазона от 010 до 25610 или же, при использовании более сложного способа кодирования, от -12810 до +12710. Поэтому для записи чисел, не входящих в указанные диапазоны, используется несколько соседних байтов памяти. Обычно это один, два, четыре, восемь или десять байтов. Так, объединение двух байтов позволяет работать с числами от 010 до 65 53510, а объединение четырех — с числами от 010 до 4 294 96729510.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|