Скачать презентацию Лекция 8 Системы счисления продолжение Представление числовой информации Скачать презентацию Лекция 8 Системы счисления продолжение Представление числовой информации

Л8_Представление данных.pptx

  • Количество слайдов: 21

Лекция 8 Системы счисления, продолжение Представление числовой информации в ЭВМ Лекция 8 Системы счисления, продолжение Представление числовой информации в ЭВМ

Особенности умножения и деления на основание системы счисления В любой b-c. c. b записывается Особенности умножения и деления на основание системы счисления В любой b-c. c. b записывается как « 10(b)» . Умножение на b сводится к дописыванию 0 справа к целому числу или сдвигу b-ичной точки на один разряд вправо. Обратно: деление на b равносильно сдвигу b-ичной точки на один разряд влево, или отбрасыванию младшей цифры целого числа при делении нацело. bk всегда представляется единицей с k нулями. Умножение (деление) на bk сводится к сдвигу b-ичной точки на k разрядов вправо (влево). Остатком от деления на bk является число, составленное из k младших цифр. Примеры: 7 = 10(7) 54 = 10000(5) 1001. 1101(2) 23 = 1001. 1101(2) 1000(2) = 1001110. 1(2)

Арифметические сдвиги Добавление k нулей справа и отбрасывание k младших цифр можно рассматривать как Арифметические сдвиги Добавление k нулей справа и отбрасывание k младших цифр можно рассматривать как операции арифметического сдвига на k позиций. В Си определены операции арифметического сдвига на k позиций, которые равносильны умножению или целочисленному делению на 2 k. << — сдвиг влево >> — сдвиг вправо Примеры: a = 5 << 3; /* после выполнения присваивания a будет иметь значение 40 */ b = 112 >> 4; /* b будет равно 7 */

Особенности двоичной арифметики + 0 1 ++ 0 1 * 0 1 0 0 Особенности двоичной арифметики + 0 1 ++ 0 1 * 0 1 0 0 0 0 1 1 0 1 Логическая аналогия Если сопоставить 0 – логическую «ложь» , а 1 – «истину» , то таблица сложения соответствует логической операции «исключающее или» , а таблицы переноса и умножения – логической операции «и» . Минимаксная аналогия a b = min (a, b) a + b = max (a, b) – min (a, b) Умножение столбиком многозначных чисел в 2 -с. с. реализуется с помощью сложения и сдвига: 1001001 * 1011 1001001 + 1001001 1100100011

Задачи Задача 1. Выразить целую часть 17. 5 * X через сложение и операции Задачи Задача 1. Выразить целую часть 17. 5 * X через сложение и операции поразрядных сдвигов числа X вправо и влево. 17. 5(10) = 16 + 1 + 0. 5 = 24 + 20 + 2– 1 = 10001. 1(2) 17. 5 *X = X* (24 + 20 + 2– 1 ) = = X*24 + X*20 + X*2– 1 = = (X << 4) + X + (X >> 1) Задача 2. Если 120(x) делится на 11(10), то как выглядит (чему равно? ) 310 в системе счисления с основанием x? Подбором можно определить, что x = 9, т. к. 120(9) = 99(10) – делится на 11 без остатка. 310 = 32*5= (32)5 = 95 = 100000(9)

Представление числовой информации в ЭВМ Память компьютера, отводимую для хранения числа или другого элемента Представление числовой информации в ЭВМ Память компьютера, отводимую для хранения числа или другого элемента данных в числовом коде, удобно описать моделью разрядной сетки — массива (линейной таблицы) b-ичных разрядов, имеющего постоянные размер k и формат, определяющий смысл отдельных разрядов. Размер разрядной сетки обычно равен или кратен размеру машинного слова и размеру минимальной порции данных, обрабатываемой одной командой процессора. Эти константы определяются архитектурой процессора и количеством разрядов, которые могут передаваться одновременно от процессора к памяти или обратно по шине данных. В большинстве компьютеров эти единицы кратны 1 байту. Формат разрядной сетки и правила выполнения арифметических операций определяются архитектурой процессора. Современные процессоры умеют работать с разрядными сетками, различающимися по размеру и формату. В языках программирования манипулирование числами разного формата реализуется через различные числовые типы данных.

Модели чисел Беззнаковые Целые Знаковые Числа С фиксированной точкой Вещественные С плавающей точкой Модели чисел Беззнаковые Целые Знаковые Числа С фиксированной точкой Вещественные С плавающей точкой

Представление целых без знака Модель беззнаковых целых описывает представление неотрицательного целочисленного диапазона [0. . Представление целых без знака Модель беззнаковых целых описывает представление неотрицательного целочисленного диапазона [0. . Nmax] в сетке разрядности k. В записи числа допускаются только k разрядов целой части; цифры, возникающие в результате операций в прочих разрядах, отсекаются. Более короткие числа дописываются нулями слева. 5 1 k=6 0 0 1 101101 4 0 k=5 0 0 0 1 1 11 6 1 k=7 1 0 1 1101111011 1 0 1 1 (усечение)

Формулы для максимальных и минимальных беззнаковых чисел в разрядной сетке Максимальное число в k-разрядной Формулы для максимальных и минимальных беззнаковых чисел в разрядной сетке Максимальное число в k-разрядной сетке в b-ичной системе счисления: Nmax (k, b) = bk – 1 «Следующим» числом за максимальным будет минимальное число 0.

Арифметика по модулю Выборка k младших цифр b-ичного числа N равносильна взятию остатка Q Арифметика по модулю Выборка k младших цифр b-ичного числа N равносильна взятию остатка Q от деления N на bk. Говорят, что N сравнимо с Q по модулю bk, что записывается как N = Q(mod bk) Множество чисел, сравнимых с Q по модулю bk, — это все числа вида Q + n * bk , где n — произвольное целое. Все они имеют в k-разрядной сетке одинаковое представление. Поэтому взятие остатка по модулю равносильно приведению исходного числа в интервал [0. . bk – 1] прибавлением или вычитанием величины модуля некоторое число раз. Пример: Числа 3, 259 = 28+3, 515 = 2 28+3, 1027 = 4 28+3 в 8 -разрядной сетке в 2 -с. с. имеют одинаковое представление: 0 0 0 1 1

Представление целых со знаком Модель знаковых целых описывает представление целочисленного диапазона [Nmin. . Nmax] Представление целых со знаком Модель знаковых целых описывает представление целочисленного диапазона [Nmin. . Nmax] в сетке разрядности k. Старший разряд кодирует знак числа. В остальных k – 1 разрядах хранятся младшие значащие цифры числа, остальные отсекаются, как и при беззнаковом кодировании. При таком кодировании Nmin = –Nmax. Хранение числа в виде знака и модуля на практике оказывается неудобным: ноль имеет двойное представление (со знаком и без), из-за чего представимый диапазон сужается на единицу, по-разному реализуются операции сложения и вычитания. Поэтому на практике применяют другой способ кодирования — дополнительный код.

Дополнительный код позволяет кодировать различными наборами цифр целочисленный интервал [–bk– 1. . + bk– Дополнительный код позволяет кодировать различными наборами цифр целочисленный интервал [–bk– 1. . + bk– 1 – 1]. При этом числа из положительной половины этого интервала имеют те же коды, как при беззнаковом кодировании, а отрицательная половина отображается на вторую половину беззнакового интервала [bk– 1. . . bk – 1] по правилу (–N) (bk – N)

Пример [–bk– 1. . + bk– 1 – 1] k = 4, b = Пример [–bk– 1. . + bk– 1 – 1] k = 4, b = 2; Nmax = 23– 1 = 7; Nmin= – 23 = – 8; – 1(10) = 1111(2);

Алгоритм Д вычисляет представление (–N) в дополнительном коде в b-ичной разрядной сетке размера k Алгоритм Д вычисляет представление (–N) в дополнительном коде в b-ичной разрядной сетке размера k взять младшие k знаков в записи числа N; при необходимости дополнить нулями слева; заменить в полученной записи каждую цифру ее дополнением до b– 1, максимальной цифры с. с. (для двоичной системы это равносильно инверсии разрядов: замене нулей единицами и наоборот); к полученному числу прибавить единицу. Действия алгоритма Д равносильны вычислению: ((bк – 1) – N) + 1 = bk – N

Свойства дополнительного кода алгоритм Д дает правильное представление обратных по знаку чисел — как Свойства дополнительного кода алгоритм Д дает правильное представление обратных по знаку чисел — как положительных, так и отрицательных; в частности, его повторное применение к своему результату восстанавливает исходное число N; для двоичной с. с: если приписать к числу его знак старшей цифрой и выполнить алгоритм Д над расширенной записью, то правильный знак обратного числа получается автоматически; ноль имеет единственное представление: алгоритм Д для ноля выдает снова ноль; то же свойство имеет минимальное отрицательное число — bk– 1, не имеющее положительного «антипода» : его дополнение равно ему самому.

Пример Представить в дополнительном коде в 4 -разрядной сетке число – 321(7) в 7 Пример Представить в дополнительном коде в 4 -разрядной сетке число – 321(7) в 7 -с. с. выравнивание: 0321 дополнение до старшей цифры: 6345 прибавление единицы: 6346

Выполнение арифметических операций в разрядной сетке Формирование знакового разряда результата арифметических операций в поразрядных Выполнение арифметических операций в разрядной сетке Формирование знакового разряда результата арифметических операций в поразрядных алгоритмах можно осуществить регулярным образом: как если бы он был просто дополнительным старшим разрядом числа. Избавляемся от реализации вычитания отдельным алгоритмом: действительно, так как а – b = а+ (– b), достаточно перевести вычитаемое в дополнительный код и выполнить сложение. Поразрядное сложение чисел со знаком и без знака можно осуществить единым алгоритмом: манипуляции с цифрами одинаковы, различается лишь способ интерпретации конечного результата — как знакового или беззнакового числа. (Для умножения и деления это не проходит без дополнительных приведений. )

Пример: вычислить разность 25 – 3 для 8 -разрядной двоичной сетки 25 – 3 Пример: вычислить разность 25 – 3 для 8 -разрядной двоичной сетки 25 – 3 = 25 + (-3) перевод +25 в 2 -с. с. : 11001 выравнивание: знаковое расширение до 8 разрядов: 00011001 перевод +3 в 2 -с. с. : 11 выравнивание: знаковое расширение +3 до 8 разрядов: 00000011 перевод +3 в дополнительный код (так как это вычитаемое): 11111101 8 -разрядное сложение с переносом (без знака): 00011001 + 11111101 1)00010110 приведение: отсечение старших разрядов вне сетки: 10110 результат — положительное знаковое число 22.

Перенос и переполнение При выполнении арифметических операций результат может оказаться вне границ допустимого интервала. Перенос и переполнение При выполнении арифметических операций результат может оказаться вне границ допустимого интервала. Приведение по модулю (путем усечения значащих цифр в старших разрядах) вызывает отклонение полученного результата от истинного. Эта ситуация называется переполнением разрядной сетки. Беззнаковое переполнение (арифметический перенос), т. е. выход за границы интервала [0. . bk – 1], при сложении равносильно переносу 1 из старшего k– 1 -го разряда в несуществующий k-й. При вычитании (большего числа из меньшего) переполнение равносильно заёму 1 из несуществующего kго разряда в старший k– 1 -й (разность отрицательна, приведенная разность оказывается больше уменьшаемого, что тоже ненормально). Процессор контролирует эти ситуации установкой флажка переноса (carry flag) в регистре состояния, который можно проверить, чтобы выполнить обработку переноса.

Знаковое переполнение, т. е. выход из интервала [–bk. . bk– 1 – 1], возникает Знаковое переполнение, т. е. выход из интервала [–bk. . bk– 1 – 1], возникает при сложении положительных чисел в случае переноса 1 в знаковый k-1 -й разряд результата (приведенная сумма становится отрицательна) или при сложении отрицательных с заёмом из знакового разряда (приведенная сумма становится положительна); аналогично — при вычитании. Процессор контролирует знаковое переполнение установкой флажка переполнения (overflow flag) в регистре состояния. Так как операции типа сложения для знаковых и беззнаковых чисел реализуются одной командой, флажки переноса и переполнения формируются одновременно, но для знаковой арифметики несущественно состояние переноса, а для беззнаковой — переполнения.

Примеры 1: 1111100 + 1: 1110001 1)1: 1101101 0: 1111111 + 0: 0000010 1: Примеры 1: 1111100 + 1: 1110001 1)1: 1101101 0: 1111111 + 0: 0000010 1: 0000001 перенос = 1, переполнение = 0 Числа со знаком: (-4)+(-15)=(-19) перенос = 0, переполнение = 1 Числа со знаком: 127 + 2 =(256) - 127 – перенос не имеет смысла Числа без знака: – знаковое переполнение Числа без знака: 252 + 241 = 493 = (256 + )237 – перенос указывает, что произошло беззнаковое переполнение 127 + 2 = 129 – переполнение не имеет смысла, ошибки нет