Представление целых чисел в дополнительном коде
Другой способ представления целых чисел — дополнительный код. Диапазон значений величин зависит от количества бит памяти, отведенных для их хранения. Например, величины типа Integer (все названия типов данных здесь и ниже представлены в том виде, в каком они приняты в языке программирования Turbo Pascal. В других языках такие типы данных тоже есть, но могут иметь другие названия) лежат в диапазоне от -32768 (-215) до 32767 (215 - 1) и для их хранения отводится 2 байта (16 бит); типа LongInt — в диапазоне от -231 до 231 - 1 и размещаются в 4 байтах (32 бита); типа Word — в диапазоне от 0 до 65535 (216 - 1) (используется 2 байта) и т.д.
Как видно из примеров, данные могут быть интерпретированы как числа со знаком, так и без знака. В случае представления величины со знаком самый левый (старший) разряд указывает на положительное число, если содержит нуль, и на отрицательное, если — единицу.
Вообще, разряды нумеруются справа налево, начиная с 0. Ниже показана нумерация бит в двухбайтовом машинном слове.
Дополнительный код положительного числа совпадает с его прямым кодом. Прямой код целого числа может быть получен следующим образом: число переводится в двоичную систему счисления, а затем его двоичную запись слева дополняют таким количеством незначащих нулей, сколько требует тип данных, к которому принадлежит число.
Например, если число 37(10) = 100101(2) объявлено величиной типа Integer (шестнадцатибитовое со знаком), то его прямым кодом будет 0000000000100101, а если величиной типа LongInt (тридцатидвухбитовое со знаком), то его прямой код будет 00000000000000000000000000100101. Для более компактной записи чаще используют шестнадцатеричное представление кода. Полученные коды можно переписать соответственно как 0025(16) и 00000025(16).
Дополнительный код целого отрицательного числа может быть получен по следующему алгоритму:
1. записать прямой код модуля числа;
2. инвертировать его (заменить единицы нулями, нули — единицами);
3. прибавить к инверсному коду единицу.
Например, запишем дополнительный код числа -37, интерпретируя его как величину типа LongInt (тридцатидвухбитовое со знаком):
1. прямой код числа 37 есть 00000000000000000000000000100101;
2. инверсный код 11111111111111111111111111011010;
3. дополнительный код 11111111111111111111111111011011 или FFFFFFDB(16).
бным). Под точкой здесь подразумевается знак-разделитель целой и дробной части числа.
Билет№12
1)ПРЕДСТАВЛЕНИЕ ЦЕЛЫХ ЧИСЕЛ
Множество целых чисел, представленных в памяти ЭВМ, ограничено. Диапазон значений зависит от размера ячеек памяти, используемых для их хранения.
Для целых чисел существуют два представления:
-беззнаковое;
-со знаком.
В К-разрядной ячейке может храниться 2к различных значений целых чисел.
Диапазон значений целых беззнаковых чисел (только положительные):
от 0 до 2к - 1
для 16-разрядной ячейки от 0 до 65535
для 8-разрядной ячейки от 0 до 255
Диапазон значений целых чисел со знаком (и отрицательные, и положительные в равном количестве):
от -2к-1 до 2к-1-1
для 16-разрядной ячейки от -32768 до 32767
для 8-разрядной ячейки от -128 до 127
Чтобы получить внутреннее представление целого положительного числа N, хранящегося в К-разрядной ячейке, необходимо:
1. перевести число N в двоичную систему счисления;
2. полученный результат дополнить слева незначащими нулями до К разрядов.
ПРИМЕР
Получить внутреннее представление целого числа 1607 в 2-х байтовой ячейке.
Решение:
N=1607=110010001112.
Внутреннее представление этого числа будет: 0000 0110 0100 0111. Шестнадцатеричная форма внутреннего представления числа: 0647.
Алгоритм представления целого положительного числа в компьютере в двух байтовом формате
1. Число переводится в двоичную систему счисления;
2. Результат дополняется нулями слева в пределах выбранного формата;
3. Последний разряд является знаковым, в положительном числе он равен 0, а в отрицатель6ном 1.
Пример: представить десятичное число – 18 в двухбайтовом формате.
Переведем – 18 в двоичную систему счисления 18 2
18 = 10010
Запишем в старший разряд знак числа
Билет №13
1) Целые отрицательные числа.
Разберемся, как представляются отрицательные числа. Казалось бы, для этого достаточно заменить 0 на 1 в старшем (31-м) разряде ячейки памяти. Однако реально это делается несколько сложнее. Для представления отрицательных целых чисел используется дополнительный код.
Дополнительным кодом двоичного числа X в N-разрядной ячейке является число, дополняющее его до значения 2.
Получить дополнительный код можно следующим путем:
1. записать внутреннее представление положительного числа X;
2. записать обратный код этого числа заменой во всех разрядах 0 на 1 и 1 на 0;
3. к полученному числу прибавить 1.
Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
1.
2.
3.
Шестнадцатеричная форма результата:
FF FF ЕА 04.
Старший разряд в представлении любого отрицательного числа равен 1. Следовательно, он указывает на знак числа и поэтому называется знаковым разрядом.
Почему отрицательные числа представляются в дополнительном коде? Дело в том, что в этом случае операция вычитания двух чисел сводится к сложению с дополнительным кодом вычитаемого, и процессору достаточно уметь лишь складывать числа. В самом деле:
А - В = А + (-В).
Если значение (-В) будет иметь форму дополнительного кода, то в памяти ЭВМ получится правильный результат.
Проверим, действительно ли в ячейке памяти получится О в результате сложения числа 5628 с числом -5628 в форме дополнительного кода.
00000000 00000000 00010101 11111100 + 11111111 11111111 11101010 000000100 =
1 00000000 00000000 00000000 00000000
Что и требовалось доказать! Единица в старшем разряде, получаемая при сложении, выходит за границу разрядной сетки машинного слова и исчезает.
Двоичное 32-разрядное число 231 является «отрицательным самому себе». Получим его дополнительный код:
Определим по этим правилам внутреннее представление числа -562810 в 32-разрядной ячейке.
1.
2.
3.
Билет№14
1) Представление вещественного числа в компьютер