Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Infa / 1лек.ppt
Скачиваний:
73
Добавлен:
27.04.2015
Размер:
5.1 Mб
Скачать

В k-разрядной ячейке может храниться 2k различных значений целых чисел.

Алгоритм внутреннего представления целого положительного числа N, хранящегося в k-разрядном машинном слове:

-перевести число N в двоичную систему счисления; -дополнить слева незначащими нулями до k разрядов.

Переведем число 160710 в двоичную систему: 160710 =

110010001112. Внутреннее представление этого числа в ячейке будет следующим: 0000 0110 0100 0111.

Для записи внутреннего представления целого отрицательного числа (-N) необходимо:

-получить внутреннее представление положительного числа N;

-обратный код этого числа заменой 0 на 1 и 1 на 0; -полученному числу прибавить 1 (дополнительный код).

Инвертированием получим обратный код: 1111 1001 1011 1000. Добавим единицу: 1111 1001 1011 1001 - это и есть внутреннее

двоичное представление числа -1607.

Представление числовых данных в памяти ЭВМ

Для представления информации в памяти ЭВМ (как числовой, так и не числовой) используется двоичный способ кодирования.

Элементарная ячейка памяти ЭВМ имеет длину 8 бит (байт). Каждый байт имеет свой номер (его называют адресом). Наибольшую последовательность бит, которую ЭВМ может обрабатывать как единое целое, называют машинным словом.

Длина машинного слова зависит от разрядности процессора и может быть равной 16, 32, 64 битам и т.д.

Представление целых чисел в дополнительном коде

Диапазон значений величин зависит от количества бит памяти, отведенных для их хранения. Например, величины типа Integer лежат в диапазоне от -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).

Дополнительный код (англ. two’s complement, иногда twos- complement) — наиболее распространённый способ представления отрицательных целых чисел в компьютерах.

Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел, чем упрощает архитектуру ЭВМ.

Дополнительный код отрицательного числа можно получить инвертированием модуля двоичного числа (первое дополнение) и прибавлением к инверсии единицы (второе дополнение).

Дополнительный код целого отрицательного числа может быть получен по следующему алгоритму:

•записать прямой код модуля числа;

•инвертировать его (заменить единицы нулями, нули — единицами);

•прибавить к инверсному коду единицу.

Например, запишем дополнительный код числа -37, интерпретируя его как величину типа LongInt (тридцатидвухбитовое со знаком):

прямой код числа 37 есть 00000000000000000000000000100101;

инверсный код 11111111111111111111111111011010;

дополнительный код 11111111111111111111111111011011 или FFFFFFDB(16).

При получении числа по его дополнительному коду прежде всего необходимо определить его знак. Если число окажется положительным, то просто перевести его код в десятичную систему счисления. В случае отрицательного числа необходимо выполнить следующий алгоритм:

•. вычесть из кода числа 1;

•инвертировать код;

•перевести в десятичную систему счисления. Полученное число записать со знаком минус

Примеры. Запишем числа, соответствующие дополнительным кодам:

•0000000000010111. Поскольку в старшем разряде записан нуль, то результат будет положительным. Это код числа 23.

•1111111111000000. Здесь записан код отрицательного числа. Исполняем алгоритм: 1) 1111111111000000(2) - 1(2) =

1111111110111111(2); 2) 0000000001000000; 3) 1000000(2) = 64(10). Ответ: -64.

«Число с плавающей запятой» это синоним для «число, записанное в экспоненциальной форме»:

1,23 *105 = 12,3 * 104 = 1230 * 102 = 0,123 * 106 = 1230000 * 10-1

Самые простые операции. Пусть:

X1 = M1qp1 X2 = M2qp2

Тогда:

X1 * X2 = M1qp1 * M2qp2 = M1 * M2 * qp1 * qp2 = (M1 * M2) * qp1+p2 X1 / X2 = M1qp1 / M2qp2 = M1 / M2 * qp1 / qp2 = (M1 / M2) * qp1-p2

То есть, при умножении нужно перемножить мантиссы и сложить показатели степени, при делении – разделить мантиссы и вычесть из показателя степени делимого показатель степени делителя. Например:

(1,2*105) * (2*10-2) = (1,2 * 2) * 105-2 =2,4*103

Соседние файлы в папке Infa