Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Представление информацииПредставление целых чисел В общем случае под целое число можно отвести любое число соседних байтов памяти, однако система команд ПК поддерживает работу с числами только размером в байт и слово и частично поддерживает работу с числами размером в двойное слово (если числа занимают иное количество байтов, то все операции над ними надо реализовывать самому программисту). Поэтому можно считать, что в ПК целые числа представляются только байтом, словом или двойным словом. Именно эти форматы чисел мы и будем рассматривать. В ПК делается различие между целыми числами без знака (неотрицательными) и со знаком. Это объясняется тем, что в ячейках одного и того же размера можно представить больший диапазон беззнаковых чисел, чем неотрицательных знаковых чисел. Например, в байте можно представить беззнаковые числа от 0 до 255, а неотрицательные знаковые числа - только от 0 до 127. Поэтому, если известно заранее, что некоторая числовая величина является неотрицательной, то выгоднее рассматривать ее как беззнаковую, чем как знаковую. Целые числа без знака Беззнаковые числа могут быть представлены в виде байта, слова или двойного слова - в зависимости от их размера. Такие числа записываются в ячейки в двоичной системе счисления, занимая все разряды ячейки. Например, если для целого 98 отведен байт, то содержимым байта будет двоичное число 01100010 (62h), а если отведено слово, то оно будет иметь вид 0062h. Поскольку в ячейке из 2k разрядов можно записать к различных комбинаций из 0 и 1, то в виде байта можно представить целые от 0 до 255 (=28-1), в виде слова - целые от 0 до 65535 (=216-1), в виде двойного слова - целые от 0 до 4 294 967 295 (=232-1). Отметим "экзотическую" особенность представления чисел в ПК: числа размером в слово и двойное слово хранятся в памяти в "перевернутом" виде". Если на число отведено слово памяти, то старшие (левые) 8 битов числа размещаются во втором байте слова, а младшие (правые) 8 битов - в первом байте; в терминах шестнадцатеричной системы: первые две цифры числа хранятся во втором байте слова, а две последние цифры - в первом байте. Например, число 98 = 0062h хранится в памяти так (А - адреса слова): Зачем так сделано? Как известно, сложение и вычитание многозначных чисел мы начинаем с действий над младшими цифрами (например, при сложении чисел 1234 и 5678 мы сначала складываем цифры 4 и 8), а затем постепенно переходим к более старшим цифрам. С другой стороны, первые модели ПК (с процессором 8080) были 8-разрядными, в них за раз можно было считать из памяти только один байт. Поскольку в этих условиях многозначное число нельзя считать из памяти сразу целиком, то в первую очередь приходится считывать байт, где находятся младшие цифры числа, а для этого надо, чтобы такой байт хранился в памяти первым. По этой причине в первых моделях ПК и появилось "перевернутое" представление чисел. В последующих же моделях, где уже можно было сразу считать из памяти все число, ради сохранения преемственности, ради того, чтобы ранее составленные программы могли без изменений выполняться на новых ПК, сохранили это "перевернутое" представление чисел. Отметим, что в регистрах числа размером в слово хранятся в нормальном, не перевернутом виде - за этим следят команды пересылки: "Перевернутое" представление используется и для чисел размером в двойное слово: в первом байте двойного слова хранятся младшие (правые) 8 битов числа, во втором байте - предпоследние 8 битов и т. д. Например, число 12345678h хранится в памяти так: Если рассматривать двойное слово как два слова, тогда можно сказать, что в первом слове хранятся 16 младших (правых) битов числа, а во втором слове -16 старших (левых) битов, причем каждое из этих слов в свою очередь "перевернуто". Целые числа со знаком Эти числа также представляются в виде байта, слова и двойного слова. Как байт можно представить числа от -128 до +127, как слово - от -32768 до +32767, как двойное слово - от -2147483648 до +2147483647. В ПК знаковые числа записываются в дополнительном коде: неотрицательное число записывается так же, как и беззнаковое число, а отрицательное число х представляется беззнаковым числом 2k-|x|, где k - количество разрядов в ячейке, отведенной под число: Например, дополнительным кодом числа +98 будет байт 62h или слово 0062h, а дополнительным кодом числа -98 - байт 9Eh (=158=256-98) или слово FF9Eh (=216-98=10000h-62h). Приведем еще несколько примеров представления знаковых чисел в дополнительном коде (при ячейке размером в байт): Из этих примеров видно, что в дополнительном коде самый левый бит играет роль знакового: для неотрицательных чисел он равен 0, а для отрицательных - 1. Как и беззнаковые, знаковые числа размером в слово и двойное слово записываются в памяти в "перевернутом" виде. Например, число -98 как слово будет храниться в памяти таким образом: При этом знаковый бит оказывается во втором (правом) байте слова. Двоично-десятичные числа Обработка числовой информации на ЭВМ, как правило, происходит следующим образом. Поскольку исходные данные и результаты записываются в привычной для людей десятичной системе, а ЭВМ работает с двоичными числами, то при вводе числа переводятся в двоичную систему, после чего происходит обработка двоичных чисел, а при выводе результаты переводятся в десятичную систему. При этом на перевод чисел из одной системы в другую, естественно, тратится время. Но если исходных данных и результатов немного, а их обработка данных занимает значительное время, тогда затраты на переводы не очень заметны. Однако есть классы задач (например, коммерческие), для которых характерен ввод большого массива числовых данных с последующим применением к ним всего одной-двух арифметических операций и выводом также большого количества результатов. В этих условиях переводы чисел из десятичной системы в двоичную и обратно могут занять львиную долю общих затрат времени, что, конечно, невыгодно. С учетом этого в ПК предусмотрено специальное представление целых чисел, при котором они фактически не отличаются от записи чисел в десятичной системе и которое потому практически не требует перевода чисел из внешнего представления во внутреннее и обратно, и предусмотрены команды арифметических операций над такими числами. Данное представление чисел называется двоично-десятичным (binary coded decimal, BCD-числа) и строится по следующему принципу: берется десятичная запись числа и каждая его цифра заменяется на четыре двоичные цифры (от 0000 до 1001), обозначающие эту цифру в двоичной системе. Например, число 193 будет представлено так: 0001 1001 0011. Различие между двоичным и двоично-десятичным представлениями чисел проявляется в том, что если в двоичном представлении за основу берется величина числа (независимо от того, как именно оно вначале было записано), то в двоично-десятичном представлении за основу берется запись числа, причем именно в десятичной системе (если число записать в другой системе, скажем в семеричной, то получилось бы иное представление). При этом однозначные числа (от 0 до 9) записываются одинаково в обоих представления, но уже двузначные числа представляются по-разному: например, число 13 в двоичном виде записывается как 00001011, а в двоично-десятичном - как 00010011. Достоинством двоично-десятичных чисел, как уже отмечалось, является то, что они практически не требуют перевода из десятичной системы. Дело в том, что ввод чисел осуществляется по цифрам, а двоично-десятичное представление и есть последовательность цифр числа. Недостаток же этого представления заключается в том, что имеющиеся в ПК команды позволяют выполнять арифметические операции только над однозначными двоично-десятичными числами, операции же над многозначными числами приходится уже реализовывать программным способом, что долго. В то же время операции над многозначными двоичными числами реализуются аппаратно, а потому выполняются быстрее. В дальнейшем мы не будем рассматривать двоично-десятичные числа, и лишь в конце книги (в разд. 14.1) им будет уделено внимание. О вещественных числах В ПК нет команд, реализующих арифметические операции над вещественными числами. Это связано с тем, что аппаратная реализация этих операций - вещь дорогая, а при создании ПК во главу угла всегда ставили дешевизну; поэтому, чтобы сократить стоимость ПК, в его систему команд, и не включают команды вещественной арифметики. Как же тогда работать на ПК с вещественными числами? Возможны два решения данной проблемы. Во-первых, на основе имеющихся команд можно написать процедуры, реализующие арифметические операции над вещественными числами, и в те места программы, где требуется выполнить операции над вещественными числами, нужно вставить обращения к этим процедурам. Во-вторых, к ПК можно присоединить специальное устройство - арифметический сопроцессор, который умеет выполнять арифметические операции над вещественными числами. Центральный процессор взаимодействует с этим сопроцессором по следующему сценарию: когда надо выполнить вещественную операцию, центральный процессор посылает сигнал сопроцессору и передает ему соответствующие операнды (в ПК есть специальная команда для этого); сопроцессор выполняет указанную операцию, записывает результат в определенное место и возвращает управление центральному процессору, который после этого продолжает свою работу.
|