Диапазон целых чисел без знака
Диапазон допустимых значений в каждом из таких типов однозначно определяется количеством разрядов в нем.
Поясним это подробнее. В компьютере числа записываются при помощи 0 и 1, поэтому в ячейку из k разрядов мы можем записать некий набор нулей и единиц, который и будет рассматриваться как двоичное число. Минимальное число, которое можно записать в k разрядах, будет состоять из k нулей, т.е. это число 0. Максимальное будет состоять из k единиц. Это число (k единиц в двоичной системе счисления) в десятичной системе счисления равно 2k – 1.
Таким образом, для беззнаковых типов нижняя граница диапазона значений всегда равна нулю, а верхнюю границу диапазона допустимых значений можно подсчитать, зная количество разрядов, занимаемых элементами данного типа.
Целые числа со знаком для k-разрядных типов принадлежат диапазону [-2k-1, 2k-1 -l]. Этот диапазон не является симметричным относительно 0, что следует учитывать при программировании. Если, например, изменить знак у наибольшего по модулю отрицательного числа, то полученный результат окажется уже не представимым в том же числе разрядов.
Приведем значения границ диапазонов для различных типов целых чисел, указывая число разрядов и названия соответствующих типов, реализованных в языке программирования Turbo-Pascal:
Для представления чисел со знаком в ЭВМ применяют прямой, обратный и дополнительный коды.
Общая идея построения кодов такова. Код трактуется как число без знака, а диапазон представляемых кодами чисел без знака разбивается на два поддиапазона. Один из них представляет положительные числа, другой - отрицательные. Разбиение выполняется таким образом, чтобы принадлежность к поддиапазону определялась максимально просто.
|
|
Наиболее распространенным и удобным является формирование кодов таким образом, чтобы значение старшего разряда указывало на знак представляемых чисел, т.е. использование такого кодирования позволяет говорить о старшем разряде как о знаковом (бит знака) и об остальных как о цифровых разрядах кода.
Прямой код представляет собой одинаковое представление значимой части числа для положительных и отрицательных чисел и отличается только знаковым битом. В прямом коде число 0 имеет два представления «+0» и «–0».
Цифровые разряды прямого кода содержат модуль представляемого числа, что обеспечивает наглядность представления чисел в прямом коде (ПК).
Прямой код может быть получен следующим образом:
1) Число переводится в двоичную систему
2) Двоичную запись слева дополняют таким количеством незначащих нулей, сколько требует тип данных, к которому принадлежит число
|
|
Пример 1: Число 5(10) объявлено величиной типа Integer. Каким будет его прямой код?
1) 5(10) = 101(2)
2) Для хранения числа типа Integer отводится 2 байта (16 разрядов), дополняем число нулями слева до 16 разрядов: 0000 0000 0000 0101 – прямой код числа. Шестнадцатеричная форма внутреннего представления числа: 0005.
Двоичное число со знаком будет выглядеть так, как показано на рис. 2.1.
Рис. 1. Формат двоичного числа со знаком в прямом коде
а - положительное число; б – отрицательное
Пример записи числа в прямом коде:
А1=+0,1010 и А2= – 0,1010 в прямом коде записываются в виде: [А1]пр=0 1010 и [А2]пр=1 1010.
Обратный код для положительных чисел имеет тот же вид, что и прямой код, а для отрицательных чисел образуется из прямого кода положительного числа путем инвертирования всех значащих разрядов прямого кода. В обратном коде число 0 также имеет два представления «+0» и «–0».
Обратный код отрицательного двоичного числа формируется дополнением модуля исходного числа нулями до самого старшего разряда модуля, а затем поразрядной заменой всех нулей числа на единицу и всех единиц на нули. В знаковом разряде обратного кода у положительных чисел будет 0, а у отрицательных - 1.
На рис. 2приведен формат однобайтового двоичного числа в обратном коде.
|
|
Рис. 2. Формат двоичного числа со знаком в обратном коде
а - положительное число; б – отрицательное
В общем случае ОК является дополнением модуля исходного числа до наибольшего числа без знака, помещенного в разрядную сетку.
Алгоритм формирования ОК очень прост, при этом ОК позволяет унифицировать операции сложения и вычитания в АЛУ, которые в прямом коде выполняются по-разному. Однако работа с ОК вызывает ряд трудностей. В частности, возникают два нуля: +0 и -0, т.е. в прямом коде (в котором представлены положительные числа) имеет место (+0) = 000...0, а в обратном коде (в котором представлены отрицательные числа): (-0) = 111...1.
Кроме того, в операциях сложения и вычитания требуется дополнительная операция по прибавлению бита переноса в младший разряд суммы. Рассмотрим правила алгебраического сложения в ОК (поскольку А-В=А+(-В)). Алгоритм сложения в ОК включает в себя:
· сложение кодов, включая знаковый разряд;
· прибавление переноса к МЗР (младшему значащему разряду) суммы.
Например, числа А1=+0,1010 и А2= – 0,1010 в обратном коде записываются в виде [А1]обр.=0 1010 и [А2]обр.=1 0101.
Пример : В1 = +0,101100 [В1]обр.= 0 101110;
В2 = – 0,010101 [В2]обр.= 1 101010.
Дополнительный код для положительных чисел имеет тот же вид, что и прямой код, а для отрицательных чисел образуется путем прибавления 1 к обратному коду. Добавление 1 к обратному коду числа 0 дает единое представление числа 0 в дополнительном коде. Однако это приводит к асимметрии диапазонов представления чисел относительно нуля. Так, в восьмиразрядном представлении диапазон изменения чисел с учетом знака.
|
|
-128 <= x <= 127.
Дополнительный код целого отрицательного числа может быть получен по следующему алгоритму:
1) записать прямой код модуля числа;
2) инвертировать его (заменить единицы нулями, нули — единицами);
3) прибавить к инверсному коду единицу
Пример 1: Записать дополнительный код числа (–5), интерпретируя его как величину типа LongInt.
1) прямой код модуля числа -5 есть 0000 0000 0000 0000 0000 0000 0000 0101;
2) инверсный код 11111111111111111111111111111010;
3) дополнительный код 1111 1111 1111 1111 1111 1111 1111 1011 = FFFFFFFB(16)
Дата добавления: 2020-12-12; просмотров: 141; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!