Приведем еще несколько примеров представления знаковыхчисел в дополнительном коде (при ячейке размером в байт):
Доп (0) = 0 = 00000000
Доп (1) = 1 = 00000001
Доп (-1) = 256 - 1 = 255 = 11111111
Доп (2) = 2 = 00000010
Доп (-2) = 256 - 2 = 254 = 11111110
Доп (3) = 3 = 00000011
Доп (-3) = 256 - 3 = 252 = 11111101
Доп (+126) = 126 = 01111110
Доп (-126) = 256 -126 = 130 = 10000010
Доп (+127) = 127 = 01111111
Доп (-127) = 256 - 127 = 129 = 10000001
Доп (-128) = 256 - 128 = 128 = 10000000
Из этих примеров видно, что в дополнительном коде самый левый бит играет роль знакового:
- для неотрицательных чисел он" равен 0,
- а для отрицательных равен 1.
Как и беззнаковые, знаковые числа размером в слово и двойное слово записываются в памяти в "перевернутом" виде.
Например,
число -98 как слово будет храниться в памяти таким образом:
адрес ячейки: A A+l
↑ ↑
содержимое: 9E FF
при этом знаковый бит оказывается во втором (правом) байтеслова.
Обработка числовой информации на ЭВМ, как правило, происходит следующим образом.
Поскольку исходные данные и результаты записываются в привычной для людей десятичнойсистеме, а ЭВМ работает с двоичными числами, то при вводе числа переводятсяв двоичную систему, после чего происходит обработка двоичных чисел, а при выводе результаты переводятся в десятичную систему.
При этом на переводчисел из одной системы в другую, естественно, тратится время.
Но если исходных данных и результатов немного, а их обработка данных занимает значительное время, тогда затраты на переводы не очень заметны.
Однако есть классы задач (например, коммерческие), для которых характерен ввод большого массива числовых данных с последующим применением к ним всего одной-двух арифметических операций и выводом также большого количества результатов.
В этих условиях переводы чисел из десятичной системы в двоичную и обратно могут занять львиную долю общих затрат времени, что, конечно невыгодно.
С учетом этого в ПК предусмотрено специальное представление целых чисел, при котором они фактически не отличаются от записи чисел в двоичной системе и которое потому практически не требует перевода чисел внешнего представления во внутреннее и обратно, и предусмотрены команды арифметических операций над такими числами.
Данное представление чисел называется двоично-десятичным(binary coded decimal, BCD-числа)
и строится по следующему принципу:
- берется десятичная запись числа
- и каждая его цифра заменяется на четыре двоичные цифры (от 0000до 1001), обозначающие эту цифру в двоичной системе.
Например,
число 193 будет представлено так: 0001 1001 0011.
Различие между двоичным и двоично-десятичным представлениями чисел проявляется в том, что если в двоичном представлении за основу берется величиначисла (независимо от того, как именно оно вначале было записано), то в двоично-десятичном представлении за основуберется запись числа, причем именно десятичной системе (если число записать в другой системе, скажем в семиричной то получилось бы иное представление).
При этом однозначные числа (от 0до 9) записываются одинаково в обоих представления, но уже двузначные а представляются по-разному:
например,
число 13 в двоичном виде записывается как 00001011, а в двоично-десятичном - как 00010011.
Достоинством двоично-десятичных чисел, как уже отмечалось, является то, что практически не требуют перевода из десятичной системы.
Дело в том, что вводчисел осуществляется по цифрам, а двоично-десятичное представление и есть последовательность цифр числа.
Недостаток же этого представления заключается в том, что имеющиеся в ПК команды позволяют выполнять арифметические операции только над однозначными двоично-десятичными числами, операции же над многозначными числами приходится уже реализовывать программным способом, что долго.
В то же время операции над многозначными двоичными числами реализуются аппаратно, а потому выполняются быстрее.
В дальнейшем мы не будем рассматривать двоично-десятичные числа.