Вы находитесь на странице: 1из 22

Лекция 2.

Информационно-
логические основы
вычислительной техники
(продолжение)
Представление числовой
информации
Представление целых чисел
• В математике используется естественная форма записи
целого числа, при которой непосредственно перед
старшей значащей цифрой числа помещается знак
плюс (+) или минус (-), а длина записи определяется
величиной числа. В компьютере это не так
• Практически все современные цифровые компьютеры
используют двоичную систему счисления, два символа
- цифры 0 и 1. Важнейшая характеристика компьютера
- длина используемого слова (т.е. количество двоичных
разрядов в нем). Поэтому в компьютере, независимо
от величины целого числа, его код всегда имеет
фиксированное количество двоичных цифр.
При записи двоичных чисел со знаком в их формате
предусмотрено два поля, определяющих знак и модуль
числа. Под знак числа отводится один двоичный разряд: знак
плюс изображается цифрой 0, знак минус – цифрой 1, а
цифра, изображающая знак, всегда записывается самой
первой в записи числа. Остальные разряды определяют
модуль числа. Способы представления модуля числа могут
быть разные

Знак

Модуль числа

0 0 0 0 0 0 0 0

7 6 5 4 3 2 1 0
Прямой код В n-разрядном формате таким
способом можно представить числа в
диапазоне [-(2n-1 – 1); 2n-1 - 1

Число Прямой код


+1101 (+13) 0000 1101
+1011101 (+93) 0101 1101
- 1101 (-13) 1000 1101

Представление двоичных чисел в


прямом коде
Достоинства и недостатки представления чисел с
помощью прямого кода.
НЕДОСТАТКИ
ДОСТОИНСТВА
• Правила счета для положительных и
• Получить прямой код отрицательных чисел разные, т.к. при
числа просто. переходе значения числа через ноль
• Из-за того, что 0 -скачкообразное изменение кода.
обозначает +, коды • Выполнение арифметических
положительных чисел операций с отрицательными числами
при беззнаковом требует усложнения архитектуры
кодировании остаются центрального процессора (для
неизменными. вычитания невозможно использовать
сумматор, для этого необходима
• Количество отдельная специальная схема).
положительных чисел • Существуют два нуля: +0 (000...000) и
равно количеству -0 (100...000), из-за чего усложняется
отрицательных арифметическое сравнение
Код со сдвигом – используется для представления порядка
вещественных чисел

Это способ представления целых чисел со знаком, при


котором 000…0 интерпретируется как минимально возможное
отрицательное число, а 111…1 – как максимальное
положительное число. Для кодирования числа в n-разрядном
формате нужно к нему прибавить величину сдвига 2n-1, для
декодирования – вычесть эту величину
• число -5 в 8-разрядном формате, использующем код со
сдвигом, превратится в
-5 + 128 = 123, то есть 01111011

Число Код со сдвигом


• +1101 (+13) 13+128=141 1000 1101
• +1011101 (+93) 93+128=221 1101 1101
• - 1101 (–13) -13+128=115 0111 0011
В n-разрядном формате в виде кода со
сдвигом можно представить числа в
диапазоне [-2n-1; 2n-1 - 1]

По сути, при таком


кодировании:
1) к кодируемому числу
прибавляют 2n-1;
2) переводят получившееся
число в двоичную
систему счисления

Представление двоичных чисел


в коде со сдвигом
Достоинства и недостатки представления чисел с
помощью кода со сдвигом

НЕДОСТАТКИ
• При арифметических
ДОСТОИНСТВА операциях нужно учитывать
смещение, то есть
• Не требуется проделывать на одно
действие больше (например,
усложнение
после “обычного” сложения
архитектуры
двух чисел у результата будет
процессора. двойное смещение, одно из
• Нет проблемы двух которых необходимо
нулей: положительного вычесть).
и отрицательного • Ряды положительных и
отрицательных чисел
несимметричны
Обратный код
Алгоритм получения обратного кода числа :
• – если число положительное, то в старший разряд
(являющийся знаковым) записывается 0, а далее
записывается само число (т.е. для положительного числа
обратный код совпадает с прямым кодом);
• – если число отрицательное, то в знаковый разряд
записывается 1, а в остальные разряды - инвертированное
значение модуля числа (1 меняем на 0, а 0 меняем на 1);
• – если число является нулем, то его можно представить двумя
способами: +0 (000...000) или -0 (111...111)

Число Обратный код


+1101 (+13) 0000 1101
+1011101 (+93) 0101 1101
-1101 (–13) 1111 0010
В n-разрядном формате с использованием
обратного кода можно представить числа в
диапазоне [-(2n-1 – 1); 2n-1 - 1]
Достоинства и недостатки представления чисел с
помощью обратного кода
• Простое получение кода отриц.
чисел.
• Из-за того, что 0 обозначает +, коды НЕДОСТАТКИ
положительных чисел при
беззнаковом кодировании остаются
неизменными. • Существуют два нуля:
• Количество положительных чисел
положительный (+0) и
равно количеству отрицательных.
• И к положительным, и к
отрицательный (-0).
отрицательным числам можно • Выполнение
применять одни и те же правила, а арифметических операций
операцию вычитания A-B можно
заменить операцией сложения чисел
с отрицательными числами
A+(-B). требует усложнения
• Простое восстановление прямого архитектуры центрального
кода отрицательного числа из процессора
обратного кода: для этого надо все
разряды, кроме знакового,
инвертировать
Дополнительный код
Чаще всего для представления отрицательных чисел
используется дополнительный код. Алгоритм получения
дополнительного кода:
• если число неотрицательное, то в старший разряд
(являющийся знаковым) записывается 0, а далее
записывается само число (т.е. совпадает с прямым кодом);
• – если число отрицательное, то все разряды модуля числа
инвертируются (т.е. формируется обратный код), к
инвертированному числу прибавляется 1, а в знаковый
разряд записывается 1
Число Дополнительный код
+1101 (+13) 0000 1101
+1011101 (+93)0101 1101
-1101 (–13) 1111 0011
В n-разрядном формате с использованием
дополнительного кода можно представить
числа в диапазоне [-2n-1; 2n-1 - 1]
Достоинства представления чисел с помощью
дополнительного кода
• Нет проблемы двух нулей, нулевое значение изображается
только одной комбинацией. Обеспечивается естественный
переход через ноль
• Достаточно простое получение кода отрицательных чисел.
• Простое восстановление прямого кода из дополнительного:
повторить в том же порядке действия, используемые для
перевода из прямого кода в дополнительный: сначала все
разряды, кроме знакового, заменить на противоположные, а
затем прибавить 1.
• Единообразная реализация операции сложения чисел разных
знаков (алгебраическое сложение), а операцию вычитания
можно свести к операции сложения заменой знака
вычитаемого на обратный. Это существенно упрощает
архитектуру процессора и увеличивает скорость выполнения
операций
Недостатки представления чисел с пом. дополнительного кода
• Ряды положительных и отрицательных чисел
несимметричны, но это не так важно: с помощью
дополнительного кода достигаются гораздо более важные
результаты.
• Числа в дополнительном коде нельзя сравнивать как
беззнаковые или вычитать без расширения разрядности.

Несмотря на это, дополнительные коды в современных


вычислительных системах используется чаще всего.
Таким образом, во всех трех основных кодах положительные числа
выглядят одинаково (табл. 1 дальше). Различия в форме записи
отрицательных чисел в прямом, обратном и дополнительном
кодах касаются только способа представления модуля числа, а
место расположения знакового разряда остается неизменным
Примеры двоичного представления целых чисел в разных кодах
Характеристики форматов целых чисел
Название
типа переменной
Название Диапазон Размер
формата значений переменной, бит
Visual Basic C++

-128…
SByte signed char 8
127

-32768…
Short short 16
32767
Знаковый целый
-2147483648…
Integer int 32
2147483647

-9223372036854775808…
Long long 64
9223372036854775808

0...
Byte unsigned char 8
255

0…
UShort unsigned short 16
65535
Беззнаковый
целый
0…
UInteger unsigned int 32
4294967295

0…
ULong unsigned long 64
18446744073709551615
Арифметические действия над целыми числами
со знаком

Двоичные таблицы сложения и умножения


Сложение обратных кодов:
Десятичная записьДвоичные коды
1. A, B ≥ 0.
3 0 0000011
+ 7 + 0 0000111
10 0 0001010
2. A ≥ 0, B < 0, |A| < |B|.
3 0 0000011 – Прямой код числа 3
+ -10 + 1 1110101 – Обратный код числа -10
-7 1 1111000 – Обратный код числа -7
1 0000111 – Прямой код числа -7
3. A ≥ 0, B < 0, |A| > |B|.
10 0 0001010 – Прямой код числа 10
+ -3 + 1 1111100 – Обратный код числа -3
7 ┌ 0 0000110
└───→ +1
0 0000111 – Обратный и прямой код числа 7
Сложение обратных кодов:
Десятичная записьДвоичные коды
4. A, B < 0.
-3 1 1111100 – Обратный код числа -3
+ -7 + 1 1111000 – Обратный код числа -7
-10 ┌ 1 1110100
└───→ +1
1 1110101 – Обратный код числа -10
1 0001010 – Прямой код числа -10
5. A, B ≥ 0, (A + B) > 2n-1 (переполнение).
65 0 1000001 – Прямой код числа 65
+ 97 + 0 1100001 – Прямой код числа 97
162 1 0100010 – Переполнение
6. A, B < 0, |A + B| > 2n-1 (переполнение).
- 63 1 1000000 – Обратный код числа -63
+ - 95 + 1 0100000 – Обратный код числа -95
- 158 ┌ 0 1100000 – Переполнение
└───→ +1
Сложение дополнительных кодов:
Десятичная записьДвоичные коды
1. A, B ≥ 0. Этот случай аналогичен обратным кодам.
2. A ≥ 0, B < 0, |A| < |B|.
3 0 0000011 – Прямой код числа 3
+ -10 + 1 1110110 – Дополнительный код числа -10
-7 1 1111001 – Дополнительный код числа -7
1 0000111 – Прямой код числа -7
3. A ≥ 0, B < 0, |A| > |B|.
10 0 0001010 – Прямой код числа 10
+ -3 + 1 1111101 – Дополнительный код числа -3
7 ┌ 0 0000111 – Прямой код числа 7
└→ перенос отбрасывается
4. A, B < 0.
-3 1 1111101 – Дополнительный код числа -3
+ -7 + 1 1111001 – Дополнительный код числа -7
-10 ┌ 1 1110110 – Дополнительный код числа -10
└→ перенос отбрасывается
Случаи переполнения (5 и 6) для дополнительных кодов аналогичны обратным кодам.
Умножение и деление.
Пример. Умножим 1100112 на 1011012 (5110×4510 = 229510).
Накапливающий регистр Множитель
000000000000 │ 101101
+ 110011 │
110011 │ 101100
+ 110011 │ Сдвиг на две позиции влево
11111111 │ 101000
+ 110011 │ Сдвиг на одну позицию влево
1010010111 │ 100000
+ 110011 │ Сдвиг на две позиции влево
100011110111 │ 000000
Пример. Разделим 1011012 на 1012 (4510 / 510 = 910).
Делимое Делитель
_ 101101 │ 101
101 │ 1001 – частное
_ 0101
101
0 – остаток отсутствует

Вам также может понравиться