Автор работы: Пользователь скрыл имя, 11 Декабря 2010 в 14:59, реферат
Понятие информации и информатики
ы
х
ч
и
с
е
л
—
0.
Е
с
т
ь
у
д
о
б
н
о
е
с
о
о
т
н
о
ш
е
н
и
е
м
е
ж
д
у
з
а
п
и
с
ь
ю
п
о
л
о
ж
и
т
е
л
ь
н
о
г
о
и
о
т
р
и
ц
а
т
е
л
ь
н
о
г
о
ч
и
с
е
л
,
о
д
и
н
а
к
о
в
ы
х
п
о
м
о
д
у
л
ю.
О
н
и
с
о
в
п
а
д
а
ю
т
,
е
с
л
и
и
х
ч
и
т
а
т
ь
с
п
р
а
в
а
н
а
л
е
в
о,
д
о
п
е
р
в
о
й
е
д
и
н
и
ц
ы
в
к
л
ю
ч
и
т
е
л
ь
н
о,
а
с
э
т
о
г
о
м
е
с
т
а
о
н
и
я
в
л
я
ю
т
с
я
д
о
п
о
л
н
е
н
и
я
м
и
д
р
у
г
д
р
у
г
а
.
Д
о
п
о
л
н
е
н
и
е
м
н
а
б
о
р
а
б
и
т
о
в
я
в
л
я
е
т
с
я
н
а
б
о
р
б
и
т
о
в
,
к
о
т
о
р
ы
й
п
о
л
у
ч
а
е
т
с
я
п
у
т
е
м
з
а
м
е
н
ы
в
с
е
х
н
у
л
е
й
н
а
е
д
и
н
и
ц
ы
и
н
а
о
б
о
р
о
т
,
т.е. дополнении до N-1, где N — минимальное число, вызывающее перенос в следующий разряд при данном количестве разрядов (для 4-битового кода это 16). Это дополнение называют также инверсией
.
Н
а
п
р
и
м
е
р
, 0
0
1
0
и
1
110
—
д
о
п
о
л
н
е
н
и
я
д
р
у
г
д
р
у
г
а
.
Наборы из трех бит Наборы из четырех битов
Набор битов |
Значение |
011 | 3 |
010 | 2 |
001 | 1 |
000 | 0 |
111 | -1 |
110 | -2 |
101 | -3 |
100 | -4 |
Набор битов | Значение |
0111 | 7 |
0110 | 6 |
0101 | 5 |
0100 | 4 |
0011 | 3 |
0010 | 2 |
0001 | 1 |
0000 | 0 |
1111 | -1 |
1110 | -2 |
1101 | -3 |
1100 | -4 |
1011 | -5 |
1010 | -6 |
1001 | -7 |
1000 | -8 |
Рис. 1.9. Таблицы
кодов 3-х и 4-х битовых
Например, возьмем два числа в 4-битовом представлении 2 и -2. Они заканчиваются на 10, но запись числа 2 начинается с 00, а числа -2 — с 11. Это наблюдение может помочь найти алгоритм для получения записи отрицательного числа из записи положительного и наоборот, когда эти числа равны по модулю. Мы просто переписываем исходную последовательность справа налево до тех пор, пока не будет переписана единица, затем мы переписываем оставшиеся разряды, заменяя их дополнениями (т.е. заменяя нули на единицы, а единицы на нули). Обратите внимание, что самое маленькое отрицательное число в представлении в дополнительном коде не имеет положительного эквивалента.
Представление числа 6 и -6 в 4-битовом дополнительном коде
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
Рис. 1.10. Представление числа -6
в 4-битовом дополнительном
коде
Исходя из свойств представления чисел в двоичном дополнительном коде можно представить алгоритм их декодирования.
Если знаковый бит записи равен 0, то эта последовательность двоичной записи числа.
Например, 0110 является представлением числа 6, потому что 110 является двоичной записью шести.
Если знаковый разряд равен 1, значит, перед нами отрицательное число и надо только найти его модуль. Переписываем исходную последовательность справа налево, пока не будет переписана 1, затем переписываем оставшиеся биты, дополняя их. И, наконец, расшифровываем полученную последовательность, как если бы она была двоичной записью числа.
Например, переведём последовательность 1010 в десятичную систему счисления. Сначала определяем - перед нами отрицательное число, так как знаковый разряд равен 1. Следовательно, переписываем запись как 0110. Определяем, что она является представлением числа 6, и делаем вывод о том, что исходный набор битов является представлением числа -6.
Алгоритм сложения чисел в двоичном дополнительном коде такой же, как для двоичного сложения, только здесь все коды, включая результат операции, будут иметь одинаковую длину. Это значит, что если в результате сложения появляется дополнительный бит с левого края, он будет отсечен. Именно поэтому 0101 и 0010 в сумме дают 0111, а сумма 0111 и 1011 равна 0010 (0111 + 1011 = 10010, которая усекается до 0010).
Рассмотрим примеры сложения в дополнительном коде. В каждом случае десятичная запись представлена 4-битовым кодом, а результат сложения опять переведен в десятичную систему счисления.
Обратим внимание на то, что согласно правилам традиционной алгебры, которые мы изучали в школе, то в третьем примере нам бы потребовалась совсем другая операция (вычитание). С другой стороны, в двоичном дополнительном коде мы можем вычислить результат, во всех случаях применяя алгоритм сложения.
В этом и состоит
главное преимущество представления
чисел в двоичном дополнительном
коде: сложение любых комбинаций положительных
и отрицательных чисел может быть выполнено
с использованием одного алгоритма
и, следовательно, одной схемы.
Сложение
в десятичной системе счисления |
Сложение
в двоичном дополнительном коде |
Результат сложения в десятичной записи |
+4
3 |
+0100
0011 0111 |
7 |
+-2
-3 |
+1110
1101 1011 |
-5 |
+6
-2 |
+0110
1110 0100 |
4 |
Рис. 1.11. Таблица сложений чисел
Например, операция вычитания 7-5 аналогична операции сложения 7 + (-5). Следовательно, если потребуется вычесть 5 (с кодом 0101) из 7 (с кодом 0111), то машина, прежде всего, заменит 5 на -5 (с кодом 1011) и затем выполнит операцию сложения, результатом которой будет 0010, то есть код числа 2:
-7 -0111 +0111
5 0101 1011
2
Есть проблема в любом представлении чисел в двоичном дополнительном коде - ограничение на размер чисел, представляемых данным количеством битов. Например, нельзя получить правильного ответа, выполнив операцию сложения 5 + 4, если будем выполнять сложение в 4-битовом двоичном дополнительном коде. Ведь у числа 9 нет соответствующей записи. На самом деле мы получим ответ — 7. Такая ошибка называется переполнением (overilov), она возникает, когда нужно сохранить число, не попадающее в диапазон чисел, которые могут быть представлены в двоичном дополнительном коде. Переполнение возникает, когда нужно сложить два положительных или два отрицательных числа. В обоих случаях можно проверить, есть ли ошибка, посмотрев на знаковый разряд полученного результата, то есть переполнение возникает, если сумма двух положительных чисел имеет код отрицательного числа или сумма двух отрицательных чисел имеет код положительного числа.
Большинство машин манипулируют более длинными последовательностями битов, чем те, которые здесь обсуждаются, и операции с большими числами не вызывают переполнения. В настоящее время принято использовать 32-битовые последовательности для хранения чисел в двоичном дополнительном коде, что позволяет порождать числа до
2 147 438 647, прежде чем возникнет переполнение. Если нужно записать большее число, то можно использовать более длинный код или можно изменить единицы измерения. Например, использование в расчетах километров, а не метров позволит уменьшить размер чисел и достичь необходимой точности вычислений.
Проблема состоит в том, что компьютер может ошибаться, и пользователь должен знать о возможной опасности такой ошибки. Программисты и пользователи из-за своей самоуверенности игнорируют тот факт, что маленькие числа могут складываться и порождать большие. Например, раньше было принято использовать 16-битовый двоичный код, который означал, что переполнение не возникнет, пока не появится значение 215 = 32 768. Например девятнадцатого сентября 1989 года компьютерная система в госпитале допустила ошибку после долгих лет надежной работы. Исследование показало, что тот день был 32 768-м днем после 1 января 1900 года. Как вы думаете, какова цена этой ошибки?
Другой способ
представления целочисленных
Таблица кодов, изображенная на рисунке 1.12, называется представлением с избытком восемь. Для того чтобы понять, почему это так, сначала переведём коды из таблицы в десятичную систему счисления, как обычный двоичный код, и сравним полученные значения со значениями в таблице. В каждом случае мы обнаружим, что полученный результат превосходит код в представлении с избытком на восемь. Например, последовательность 1100 в двоичной системе является кодом 12, но в представлении с избытком она является кодом 4; последовательность 0000 в двоичной системе является кодом 0, а в представлении с избытком — кодом 8. Точно так же 5-битовое представление с избытком будет называться представлением с избытком 16, так как, например, последовательность 10000 будет кодом 0, а не 16, как в двоичной записи.