Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Диапазон целых чисел без знака ⇐ ПредыдущаяСтр 3 из 3
Диапазон допустимых значений в каждом из таких типов однозначно определяется количеством разрядов в нем. Поясним это подробнее. В компьютере числа записываются при помощи 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, а у отрицательных - 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. -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)
|