Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Диапазон целых чисел без знака






Диапазон допустимых значений в каждом из таких типов однозначно определяется количеством разрядов в нем.

Поясним это подробнее. В компьютере числа записываются при помощи 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)






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.