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

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

  • Представление целых чисел в беззнаковых целых типах.

    Для беззнакового представления все разряды ячейки отводятся под представление самого числа. Например, в байте (8 бит) можно представить беззнаковые числа от 0 до 255. Поэтому, если известно, что числовая величина является неотрицательной, то выгоднее рассматривать её как беззнаковую.

    Представление целых чисел в знаковых целых типах. Для представления со знаком самый старший (левый) бит отводится под знак числа, остальные разряды - под само число. Если число положительное, то в знаковый разряд помещается 0, если отрицательное - 1. Например, в байте можно представить знаковые числа от -128 до 127.

    Прямой код числа. Представление числа в привычной форме "знак"-"величина", при которой старший разряд ячейки отводится под знак, а остальные - под запись числа в двоичной системе, называется прямым кодом двоичного числа. Например, прямой код двоичных чисел 1001 и -1001 для 8-разрядной ячейки равен 00001001 и 10001001 соответственно. Положительные числа в ЭВМ всегда представляются с помощью прямого кода. Прямой код числа полностью совпадает с записью самого числа в ячейке машины. Прямой код отрицательного числа отличается от прямого кода соответствующего положительного числа лишь содержимым знакового разряда. Но отрицательные целые числа не представляются в ЭВМ с помощью прямого кода, для их представления используется так называемый дополнительный код . Дополнительный код положительного числа равен прямому коду этого числа. Дополнительный код отрицательного числа m равен 2 k -|m|, где k - количество разрядов в ячейке. Как уже было сказано, при представлении неотрицательных чисел в беззнаковом формате все разряды ячейки отводятся под само число. Например, запись числа 243=11110011 в одном байте при беззнаковом представлении будет выглядеть следующим образом:

При представлении целых чисел со знаком старший (левый) разряд отводится под знак числа, и под собственно число остаётся на один разряд меньше. Поэтому, если приведённое выше состояние ячейки рассматривать как запись целого числа со знаком, то для компьютера в этой ячейке записано число -13 (243+13=256=28). Но если это же отрицательное число записать в ячейку из 16-ти разрядов, то содержимое ячейки будет следующим:

    Знаковый разряд Возникает вопрос: с какой целью отрицательные числа записываются в виде дополнительного кода и как получить дополнительный код отрицательного числа? Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно было бы проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и разного знака, сводится к из поразрядному сложению. Для компьютерного представления целых чисел обычно используется один, два или четыре байта, то есть ячейка памяти будет состоять из восьми, шестнадцати или тридцати двух разрядов соответственно.

    Алгоритм получения дополнительного кода отрицательного числа. Для получения дополнительного k-разрядного кода отрицательного числа необходимо

    модуль отрицательного числа представить прямым кодом в k двоичных разрядах;

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

    к полученному обратному коду прибавить единицу. Пример: Получим 8-разрядный дополнительный код числа -52:

    00110100 - число |-52|=52 в прямом коде

    11001011 - число -52 в обратном коде

    11001100 - число -52 в дополнительном коде Можно заметить, что представление целого числа не очень удобно изображать в двоичной системе, поэтому часто используют шестнадцатеричное представление:

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

    Для представления вещественных чисел в современных компьютерах принят способ представления с плавающей запятой . Этот способ представления опирается на нормализованную (экспоненциальную) запись действительных чисел. Как и для целых чисел, при представлении действительных чисел в компьютере чаще всего используется двоичная система, следовательно, предварительно десятичное число должно быть переведено двоичную систему.

  • Представление чисел с плавающей запятой. При представлении чисел с плавающей запятой часть разрядов ячейки отводится для записи порядка числа, остальные разряды - для записи мантиссы. По одному разряду в каждой группе отводится для изображения знака порядка и знака мантиссы. Для того, чтобы не хранить знак порядка, был придуман так называемый смещённый порядок , который рассчитывается по формуле 2 a-1 +ИП, где a - количество разрядов, отводимых под порядок. Пример : Если истинный порядок равен -5, тогда смещённый порядок для 4-байтового числа будет равен 127-5=122.

    Алгоритм представления числа с плавающей запятой.

    Перевести число из p-ичной системы счисления в двоичную;

    представить двоичное число в нормализованной экспоненциальной форме;

    разместить знак, порядок и мантиссу в соответствующие разряды сетки.

    Пример: Представить число -25,625 в машинном виде с использованием 4 байтового представления (где 1 бит отводится под знак числа, 8 бит - под смещённый порядок, остальные биты - под мантиссу).

    25 10 =100011 2 0,625 10 =0,101 2 -25,625 10 = -100011,101 2 2. -100011,101 2 = -1,00011101 2 * 2 4 3. СП=127+4=131 4.

  • Можно заметить, что представление действительного числа не очень удобно изображать в двоичной системе, поэтому часто используют шестнадцатеричное представление:

  • Окончательный ответ: C1CD0000.

  • Записать внутреннее представление числа 250,1875 в форме с плавающей точкой.

  • 1) Приведем его в двоичную систему счисления с 24 значащими цифрами: 250,1875 10 =1111 1010 , 0011 0000 0000 0000 2 . 2) Запишем в форме нормлизованного двоичного числа с плавающей точкой: 0,1111 1010 0011 0000 0000 0000*10 2 1000 . Здесь мантисса, основание системы счисления (2 10 =10 2) и порядок (8 10 =1000 2) записаны в двоичной системе. 3) Вычислим машинный порядок в двоичной системе счисления: Mp 2 = 1000 + 100 0000 =100 1000. 4) Запишем представление числа в 4-х байтовой ячейке памяти с учетом знака числа:

  • Шестнадцатеричная форма: 48FA3000.

  • В семи двоичных разрядах помещаются двоичные числа в диапозоне от 0000000 до 1111111. Значит, машинный порядок изменяется в диапозоне от 0 до 127 (в десятичной системе счисления). Всего 128 значений. Порядок, очевидно, может быть как положительным так и отрицательным. Разумно эти 128 значений разделить поровну между положительным и отрицательным значениеями порядка: от -64 до 63.

    Машинный порядок смещен относительно математического и имеет только положительные значения. Смещение выбирается так, чтобы минимальному математическому значению порядка соответствовал нуль.

    Связь между машинным порядком (Мр) и математическим (р) в рассматриваемом случае выражается формулой: Мр = р + 64

    Полученная формула записана в десятичной системе. В двоичной системе формула имеет вид: Mp 2 =p 2 +1000000 2 Для записи внутреннего представления вещественного числа в 4-х байтовой ячейке необходимо: 1) перевести модуль данного числа в двоичную систему счисления с 24 значащими цифрами; 2) нормализовать двоичное число; 3) найти машинный порядок в двоичной системе счисления; 4) учитывая знак числа, выписать его представление в 4-х байтовом машинном слове.

Общие сведения.

Тип данных - это двоичный код, обладающий извест-ными свойствами согласно принятым соглашениям. Процессор (с помощью ко-манд) распознает тип данных и осуществляет над данными предписанный набор операций.

Ниже рассматриваются следующие типы данных:

● знаковые и беззнаковые целые , используемые для представления целых чи-сел в виде двоичных кодов и выполнения над ними арифметических операций по правилам двоичной арифметики;

двоично–десятичные целые , предназначенные для представления и обработки десятичных чисел;

булев тип данных , поддерживающий правила алгебры–логики (булевой алгебры);

типы с фиксированной и плавающей точкой , предназначенные для представ-ления и обработки вещественных чисел.

Выбор типа данных определяется командой программы. Например, при вы-полнении арифметической команды данные трактуются как целые числа, операн-ды в логической операции принимаются как булев тип данных, а 16–битный указа-тель используется командой для доступа к данным в текущем сегменте.

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

О формах представления чисел.

Для представления чисел широко исполь-зуются две формы: естественная и нормальная.

При естественной форме представления число имеет единственный вид записи, например: +195 - целое положительное число; –195 - целое отрица-тельное число; +0,025 - правильная положительная дробь; –195,025 - непра-вильная отрицательная дробь. Эта форма используется для представления целых чисел и чисел с фиксированной точкой (запятой).

При нормальной форме представления число записывается в виде

где М, П - мантисса и порядок числа.

Для нормальной формы представления характерна неоднозначная запись чис-ла, например: +195.025 = +195025 . 10 –3 = +19.5025 . 10 1 = +0.195025 . 10 3 . Как видно из примера, положение точки мантиссы зависит от значения порядка П. С изменением П (что всегда происходит в процессе вычислений) точка как бы начина-ет плавать. Поэтому нормальную форму (2.3.1) называют также формой пред-ставления чисел с плавающей точкой.

Числовая (как и любая другая) информация, подлежащая процессорной обра-ботке, представляется в виде

–разрядных двоичных кодов, для хранения которых используются ячейки памяти. Двоичные коды чисел имеют различные форматы.

Формат числа представляет собой совокупность разрядов (разрядную сетку), разделенную на отдельные поля: поле знака числа, поле модуля числа, поле ман-тиссы, поле модуля порядка и др. Для нумерации разрядов полей используется последовательность чисел, начиная с нуля (0, 1, 2, 3, …).

Беззнаковые целые.

Этот тип данных используется для представления нуля и положительных значений целых чисел.

На рис. 2.3.1 , а приведены форматы 8–разрядных целых чисел. Знаковый бит отсутствует, поэтому диапазон представления чисел составляет 0…2

Разрядность двоичного кода совпадает с разрядностью числа.

Знаковые целые.

Операцию вычитания двух положительных А и В чисел мож-но рассматривать как операцию алгебраического сложения чисел с разными зна-ками: А – В = А + (–

). Поэтому для замены арифметической операции вычитания операцией алгебраического сложения необходимо каким–то образом предста-вить знак числа. Обычно для знака двоичного числа отводится дополнительный разряд. Знак числа указывается в самом старшем разряде: 0 соответствует поло-жительному знаку « + » числа, 1 - отрицательному знаку « – ».

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

Для представления целых положительных двоичных чисел в

–разрядном до-полнительном коде все старшие незначащие разряды (включая знаковый) необ-ходимо заполнить нулями.

Для представления отрицательных чисел необходимо:

● проинвертировать все значащие цифровые разряды (модуль) числа;

● к полученному значению прибавить единицу;

● все старшие незначащие разряды (включая знаковый) заполнить единицами.

Например, 8–разрядный дополнительный код для положительного числа +6 имеет вид 00000110, для отрицательного числа – 6 - 11111010.

На рис. 2.3.1, б приведены форматы 8–разрядных знаковых чисел в допол-нительном коде. Диапазон их представления составляет – 2 (

–1) - разрядность значащей части числа. Современные микропроцессоры поддерживают знаковые целые длиной 16, 32 и 64 бит. Обычно используется два формата целых чисел: короткий с числом разрядов

и длинный с числом разря-дов 2

В процессе расчетов используется длинный формат, результаты выводят-ся в коротком формате. Если количество значащих разрядов модуля числа пре-вышает (

– 1), происходит переполнение разрядной сетки, приводящее к ошибке в представлении числа из–за потери старших разрядов модуля. После выполне-ния арифметических операций выход результата за диапазон отмечается уста-новкой а единицу флага переполнения О

Числа с фиксированной точкой.

При естественной форме представления вещественных чисел положение точки (запятой) фиксируется между целой и дроб-ной частями числа. Для изменения положения точки в вещественном числе необ-ходимо ввести масштабный коэффициент, значение которого должно быть выбра-но таким образом, чтобы сохранить неизменным значение вещественного числа. Часто точка фиксируется впереди старших разрядов модуля числа. При этом представление числа А с фиксированной точкой имеет вид правильной дроби, что соответствует условию

Выбранное количество значащих разрядов числа.

Условие (2.3.2) должно выполняться для исходных данных задачи и всех про-межуточных результатов вычислений, что обеспечивается путем выбора масш-табного коэффициента К.

При нарушении условия (2.3.2) число А Ф имеет целую часть, которая теряется, так как не попадает в разрядную сетку из–за переполнения. Поэтому при опреде-лении масштабного коэффициента К следует исходить из максимального значе-ния модуля задействованных при решении задачи чисел, приняв К> | А |

Тогда условие (2.3.2) для А Ф = А/К будет выполняться.

На рис. 2.3.2, а приведен формат компьютерного представления чисел А Ф с фиксированной точкой. При занесении числа А Ф в ячейку памяти свободные младшие разряды разрядной сетки заполняются нулями. Если число

значащих разрядов модуля |

– 1, то младшие разряды модуля, которые не по-местились в

–разрядной сетке, теряются. Это приводит к погрешности, абсолютное значение которой меньше единицы младшего разряда разрядной сетки, т. е.

32 абсолютная погрешность

0.5×10 – 30х0.3 = 0.5×10 – 9

Пусть заданы два числа А = –1010,101 2 и В = +10,10101 2 , для которых |

Поэтому масштаб-ный коэффициент К > |

2 4 = 10000 2 . Степень 4 свидетельствует о необходимости сдвига на 4 разря-да вправо исходных чисел

Действительно

А. К= –1010,101 . 10000 =

–0.1010101 2 ;

В Ф = В. К = 10,10101 . 10000 = 0,001010101 2 . Форматы представления чисел А Ф и В Ф показаны на рис. 2.3.2,6, в. Для сохранения точности компьютерного представления числа В Ф необходимо расширить разрядную сетку до 10 разрядов.

К достоинству представления чисел в форме с фиксированной точкой следует отнести простоту выполнения арифметических операций. Недостатки проявляют-ся в том, что:

● необходимо производить выбор масштабных коэффициентов;

● нули в старших разрядах модуля приводят к уменьшению количества разря-дов, занимаемых значащей частью модуля числа. В результате этого снижа-ется точность представления чисел с малыми значениями модуля.

Булевы типы.

Булевы величины являются беззнаковыми и используются при логических операциях

и др. Операция выполняется над от-дельными битами. Булевы операнды обрабатываются по частям, если их разряд-ность превышает разрядность процессора.

Двоично–десятичные целые.

В повседневной жизни человек пользуется де-сятичной системой счисления. Для хранения и обработки десятичных чисел в цифровых устройствах их представляют в виде двоичного кода. Представление десятичного числа, в котором каждая десятичная цифра отображается в виде двоичных символов 0 и 1, называют двоично–десятичным кодом. Так как алфавит десятичной системы состоит из 10 цифр, для записи каждой десятичной цифры выделяется слово, содержащее не менее четырех разрядов. Наиболее часто ис-пользуется 4–разрядное слово, именуемое тетрадой или полубайтом. С помощью тетрад вместо требуемых 10 можно получить 2 4 = 16 различных комбинаций, со-ставленных символов 0 и 1. При двоично–десятичном кодировании различным десятичным цифрам должны соответствовать различные комбинации символов О и 1, т. е. разрешены только 10 комбинаций из 16. Наличие разрешенных и за-прещенных комбинаций - важное свойство двоично–десятичных кодов. Это свойство отличает их от обычных позиционных систем счисления, в которых все комбинации разрешены. Общее количество различных разрешенных 4–разрядных кодов (тетрад), определяемое сочетаниями из 16 элементов по 10, составляет: С 10 16 = 18008. Широкое распространение получил так называемый код 8421, в котором используется первые десять значений двоичных чисел от 0000 (0 10) до 1001(9 10).

Достоинство 4–разрядных кодов состоит в том, что при кодировании десятич-ных чисел используется минимальное количество разрядов. Введение дополни-тельного 5–го разряда позволяет обнаружить ошибки при передаче числовой информации по линиям связи при наличии помех. Например, в 5–разрядном коде 2 из 5 все кодовые комбинации содержат две единицы и три нуля. Поэтому изме-нение любого разряда (на противоположное значение) приведет к запрещенной кодовой комбинации.

На рис. 2.3.3 приведен формат двоично–десятичного числа, содержащий 18 тетрад (

0) и знаковый разряд

(в остальных разрядах старшего байта установлены нулевые значения). Каждая тетрада соответствует одному разряду десятичного числа.

Числа с плавающей точкой.

Во многих случаях для проведения расчетов не-обходимо представлять числа с высокой точностью в широком диапазоне значе-ний. Указанным требованиям отвечает нормальная форма чисел (2.3.1). Для вы-явления особенностей ее использования для представления чисел с плавающей точкой в цифровых системах будем полагать, что:

● для записи мантиссы используется (

1)–разрядный двоичный код, причем самый старший (

–й) разряд определяет знак мантиссы (числа), остальные разряды - модуль мантиссы. Значение модуля мантиссы |М| < 1, что соот-ветствует фиксации точки перед значащими цифрами (разрядами) модуля мантиссы;

● для записи порядка П используется (р + 1)–разрядный двоичный код, причем самый старший (р–й) разряд определяет знак порядка, остальные разряды - модуль порядка. Порядок П (целое число) указывает на действительное положение точки в числе.

На рис. 2.3.4, а приведен формат числа с плавающей точкой.

Точность представления чисел (2.3.1) зависит от количества значащих цифр (разрядов) мантиссы. Для повышения точности числа с плавающей точкой пред-ставляются в нормализованной форме, признаком которой служит наличие значащей цифры (единицы для

2) в самом старшем разряде модуля ман-тиссы. Значение модуля нормализованной мантиссы при

2 лежит в пределах 2 –1 ≤ |М| < 1 (для любых порядков П). В нормализованной форме могут быть представлены все числа из некоторого диапазона за исключением нуля.

Представим в формате с плавающей точкой двоичные числа А = +10010.10101 и В = –111.0101. Запишем А и В в нормализованной форме

А = +0.1001010101 . 2 5 , В= –0.1110101000 . 2 –3 .

На основании (2.3.4) записываем модули мантиссы |М

| = 1001010101 2 , |М

| = 1110101000 2 и моду-ли порядка в двоичной системе исчисления |П А | = 5 10 = 0101 2 , |П

| = 3 10 = 0011 2 . Выбираем общее число разрядов разрядной сетки

Р = 16. Принимаем количество разрядов для модуля мантиссы, равное 10, для модуля порядка - 4.

Форматы чисел А и В показаны на рис. 2.3.4, 6, в. Мантисса и порядок операнда В, имеющие отри-цательное значение, представлены в дополнительном коде:

|# + 1 = 0001010111 + 1 = 0001011110;

|# + 1 = 0011 + 1 = 0100, где # - инверсия.

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

/ 2 –1 = 2 –(

Абсолютная погрешность представления модуля

–разрядной мантиссы; |

22 –1 - минимальное значение нормализованного модуля мантиссы.

Отметим, что в стандарте

754/854 используется порядок в форме П = Р – Е, где Е =

Смещение порядка; Р макс = 2Е. Это позволило исключить поле

знака порядка в формате представления чисел.

Максимальное значение целого неотрицательного числа достигается в случае, когда во всех ячейках хранятся единицы. Для n-разрядного представления оно будет равно

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

А = 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0 = 1 × 2 8 - 1 = 255 10 .

Диапазон изменения целых неотрицательных чисел чисел: от 0 до 255.

Для хранения целых чисел со знаком отводится две ячейки памяти (16 битов), причем старший (левый) разряд отводится под знак числа (если число положительное, то в знаковый разряд записывается 0, если число отрицательное - 1).

Представление в компьютере положительных чисел с использованием формата "знак-величина" называется прямым кодом числа. Например, число 2002 10 = 11111010010 2 будет представлено в 16-разрядном представлении следующим образом:

0 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0

Максимальное положительное число (с учетом выделения одного разряда на знак) для целых чисел со знаком в n-разрядном представлении равно:

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

Дополнительный код отрицательного числа А, хранящегося в n ячейках, равен 2 n - |A|.

Дополнительный код представляет собой дополнение модуля отрицательного числа А до 0, так как в n-разрядной компьютерной арифметике:

2 n - |А| + |А| = 0,

поскольку в компьютерной n-разрядной арифметике 2 n = 0. Действительно, двоичная запись такого числа состоит из одной единицы и n нулей, а в n-разрядную ячейку может уместиться только n младших разрядов, то есть n нулей.

Для получения дополнительного кода отрицательного числа можно использовать довольно простой алгоритм:

1. Модуль числа записать в прямом коде в n двоичных разрядах.

2. Получить обратный код числа, для этого значения всех битов инвертировать (все единицы заменить на нули и все нули заменить на единицы).

3. К полученному обратному коду прибавить единицу.

Запишем дополнительный код отрицательного числа -2002 для 16-разрядного компьютерного представления:


При n-разрядном представлении отрицательного числа А в дополнительным коде старший разряд выделяется для хранения знака числа (единицы). В остальных разрядах записывается положительное число

Чтобы число было положительным, должно выполняться условие

|А| £ 2 n-1 .

Следовательно, максимальное значение модуля числа А в га-разрядном представлении равно:

Тогда минимальное отрицательное число равно:

Определим диапазон чисел, которые могут храниться в оперативной памяти в формате длинных целых чисел со знаком (для хранения таких чисел отводится четыре ячейки памяти - 32 бита).

Максимальное положительное целое число (с учетом выделения одного разряда на знак) равно:

А = 2 31 - 1 = 2 147 483 647 10 .

Минимальное отрицательное целое число равно:

А = -2 31 = - 2 147 483 648 10 .

Достоинствами представления чисел в формате с фиксированной запятой являются простота и наглядность представления чисел, а также простота алгоритмов реализации арифметических операций.

Недостатком представления чисел в формате с фиксированной запятой является небольшой диапазон представления величин, недостаточный для решения математических, физических, экономических и других задач, в которых используются как очень малые, так и очень большие числа.

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

Формат чисел с плавающей запятой базируется на экспоненциальной форме записи, в которой может быть представлено любое число. Так число А может быть представлено в виде:

A = m × q n 2.3

где m - мантисса числа;
q - основание системы счисления;
n - порядок числа.

Для единообразия представления чисел с плавающей запятой используется нормализованная форма, при которой мантисса отвечает условию:

1/n £ |m|

Это означает, что мантисса должна быть правильной дробью и иметь после запятой цифру, отличную от нуля.

Преобразуем десятичное число 555,55, записанное в естественной форме, в экспоненциальную форму с нормализованной мантиссой:

555,55 = 0,55555 × 10 3 .

Здесь нормализованная мантисса: m = 0,55555, порядок: n = 3.

Число в формате с плавающей запятой занимает в памяти компьютера 4 (число обычной точности ) или 8 байтов (число двойной точности ). При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.

Диапазон изменения чисел определяется количеством разрядов, отведенных для хранения порядка числа, а точность (количество значащих цифр) определяется количеством разрядов, отведенных для хранения мантиссы.

Определим максимальное число и его точность для формата чисел обычной точности , если для хранения порядка и его знака отводится 8 разрядов, а для хранения мантиссы и ее знака - 24 разряда:

0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
знак и порядок знак и мантисса

Максимальное значение порядка числа составит 1111111 2 = 127 10 , и, следовательно, максимальное значение числа составит:

2 127 = 1,7014118346046923173168730371588 × 10 38 .

Максимальное значение положительной мантиссы равно:

2 23 - 1 » 2 23 = 2 (10 × 2,3) » 1000 2,3 = 10 (3 × 2,3) » 10 7 .

Таким образом максимальное значение чисел обычной точности с учетом возможной точности вычислений составит 1,701411 × 10 38 (количество значащих цифр десятичного числа в данном случае ограничено 7 разрядами).

Задания

1.26. Заполнить таблицу, записав отрицательные десятичные числа в прямом, обратном и дополнительном кодах в 16-разрядном представлении:

1.27. Определить диапазон представления целых чисел со знаком (отводится 2 байта памяти) в формате с фиксированной запятой.

1.28. Определить максимальное число и его точность для формата чисел двойной точности , если для хранения порядка и его знака отводится 11 разрядов, а для хранения мантиссы и ее знака - 53 разряда.

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

Целые числа хранятся в памяти в формате с фиксированной запятой. При таком формате представления чисел для хранения целых неотрицательных чисел отводится регистр памяти, состоящий из восьми ячеек памяти (8 бит). Каждому разряду ячейки памяти соответствует всегда один и тот же разряд числа, а запятая находится справа после младшего разряда и вне разрядной сетки. Например, число 110011012 будет храниться в регистре памяти следующим образом:

Таблица 4

Максимальное значение целого неотрицательного числа, которое может храниться в регистре в формате с фиксированной запятой, можно определить из формулы: 2n – 1, где n – число разрядов числа. Максимальное число при этом будет равно 28 – 1 = 25510 = 111111112и минимальное 010 = 000000002. Таким образом, диапазон изменения целых неотрицательных чисел будет находиться в пределах от 0 до 25510.

В отличие от десятичной системы в двоичной системе счисления при компьютерном представлении двоичного числа отсутствуют символы, обозначающие знак числа: положительный (+) или отрицательный (-), поэтому для представления целых чисел со знаком в двоичной системе используются два формата представления числа: формат значения числа со знаком и формат дополнительного кода. В первом случае для хранения целых чисел со знаком отводится два регистра памяти (16 бит), причем старший разряд (крайний слева) используется под знак числа: если число положительное, то в знаковый разряд записывается 0, если число отрицательное, то – 1. Например, число 53610 = 00000010000110002 будет представлено в регистрах памяти в следующем виде:

Таблица 5

а отрицательное число -53610 = 10000010000110002 в виде:

Таблица 6

Максимальное положительное число или минимальное отрицательное в формате значения числа со знаком (с учетом представления одного разряда под знак) равно 2n-1 – 1 = 216-1 – 1 = 215 – 1 = 3276710 = 1111111111111112 и диапазон чисел будет находиться в пределах от -3276710 до 32767.

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

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


1) модуль числа записать прямым кодом в n (n = 16) двоичных разрядах;

2) получить обратный код числа (инвертировать все разряды числа, т. е. все единицы заменить на нули, а нули – на единицы);

3) к полученному обратному коду прибавить единицу к младшему разряду.

Например, для числа -53610 в таком формате модуль будет равен 00000010000110002, обратный код – 1111110111100111, а дополнительный код – 1111110111101000.

Необходимо помнить, что дополнительный код положительного числа – само число.

Для хранения целых чисел со знаком помимо 16-разрядного компьютерного представления, когда используются два регистра памяти (такой формат числа называется также форматом коротких целых чисел со знаком), применяются форматы средних и длинных целых чисел со знаком. Для представления чисел в формате средних чисел используется четыре регистра (4 х 8 = 32 бит), а для представления чисел в формате длинных чисел – восемь регистров (8 х 8 = 64 бита). Диапазоны значений для формата средних и длинных чисел будут соответственно равны: -(231 – 1) … + 231 – 1 и -(263-1) … + 263 – 1.

Компьютерное представление чисел в формате с фиксированной запятой имеет свои преимущества и недостатки. К преимуществам относятся простота представления чисел и алгоритмов реализации арифметических операций, к недостаткам – конечный диапазон представления чисел, который может быть недостаточным для решения многих задач практического характера (математических, экономических, физических и т. д.).

Вещественные числа (конечные и бесконечные десятичные дроби) обрабатываются и хранятся в компьютере в формате с плавающей запятой. При таком формате представления числа положение запятой в записи может изменяться. Любое вещественное число К в формате с плавающей запятой может быть представлено в виде:

где А – мантисса числа; h – основание системы счисления; p – порядок числа.

Выражение (2.7) для десятичной системы счисления примет вид:

для двоичной -

для восьмеричной -

для шестнадцатеричной -

Такая форма представления числа также называется нормальной . С изменением порядка запятая в числе смещается, т. е. как бы плавает влево или вправо. Поэтому нормальную форму представления чисел называют формой с плавающей запятой . Десятичное число 15,5, например, в формате с плавающей запятой может быть представлено в виде: 0,155 · 102; 1,55 · 101; 15,5 · 100; 155,0 · 10-1; 1550,0 · 10-2 и т. д. Эта форма записи десятичного числа 15,5 с плавающей запятой не используется при написании компьютерных программ и вводе их в компьютер (устройства ввода компьютеров воспринимают только линейную запись данных). Исходя из этого выражение (2.7) для представления десятичных чисел и ввода их в компьютер преобразовывают к виду

где Р – порядок числа,

т. е. вместо основания системы счисления 10 пишут букву Е, вместо запятой – точку, и знак умножения не ставится. Таким образом, число 15,5 в формате с плавающей запятой и линейной записи (компьютерное представление) будет записано в виде: 0.155Е2; 1.55Е1; 15.5Е0; 155.0Е-1; 1550.0Е-2 и т.д.

Независимо от системы счисления любое число в форме с плавающей запятой может быть представлено бесконечным множеством чисел. Такая форма записи называется ненормализованной . Для однозначного представления чисел с плавающей запятой используют нормализованную форму записи числа, при которой мантисса числа должна отвечать условию

где |А| - абсолютное значение мантиссы числа.

Условие (2.9) означает, что мантисса должна быть правильной дробью и иметь после запятой цифру, отличную от нуля, или, другими словами, если после запятой в мантиссе стоит не нуль, то число называется нормализованным. Так, число 15,5 в нормализованном виде (нормализованная мантисса) в форме с плавающей запятой будет выглядеть следующим образом: 0,155 · 102, т. е. нормализованная мантисса будет A = 0,155 и порядок Р = 2, или в компьютерном представлении числа 0.155Е2.

Числа в форме с плавающей запятой имеют фиксированный формат и занимают в памяти компьютера четыре (32 бит) или восемь байт (64 бит). Если число занимает в памяти компьютера 32 разряда, то это число обычной точности, если 64 разряда, то это число двойной точности. При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, мантиссы и порядка. Количество разрядов, которое отводится под порядок числа, определяет диапазон изменения чисел, а количество разрядов, отведенных для хранения мантиссы, – точность, с которой задается число.

При выполнении арифметических операций (сложение и вычитание) над числами, представленными в формате с плавающей запятой, реализуется следующий порядок действий (алгоритм) :

1) производится выравнивание порядков чисел, над которыми совершаются арифметические операции (порядок меньшего по модулю числа увеличивается до величины порядка большего по модулю числа, мантисса при этом уменьшается в такое же количество раз);

2) выполняются арифметические операции над мантиссами чисел;

3) производится нормализация полученного результата.

Практическая часть

Назначение сервиса . Онлайн-калькулятор предназначен для представления вещественных чисел в формат с плавающей точкой.

Число

представлено в 10 2 системы счисления.
Представить число в:
нормализованном экспоненциальном виде
денормализованном экспоненциальном виде
32 битный формат IEEE 754
64 битный формат IEEE 754
Перевести обратно в десятичное представление

Правила ввода чисел

  1. Числа в десятичной системе счисления могут вводиться как без дробной, так и с дробной частью (234234.455).
  2. Числа в двоичной системе счисления состоят только из цифр 0 и 1 (10100.01).
  3. Числа в шестнадцатеричной системе счисления состоят из цифр 0 ... 9 и букв A ... F .
  4. Можно также получать обратное представление кода (из шестнадцатеричной системы счисления в десятичную, 40B00000)
Пример №1 . Представить число 133,54 в форме числа с плавающей точкой.
Решение . Представим число 133.54 в нормализованном экспоненциальном виде:
1.3354*10 2 = 1.3354*exp 10 2
Число 1.3354*exp 10 2 состоит из двух частей: мантиссы M=1.3354 и экспоненты exp 10 =2
Если мантисса находится в диапазоне 1 ≤ M Представление числа в денормализованном экспоненциальном виде .
Если мантисса находится в диапазоне 0,1 ≤ M Представим число в денормализованном экспоненциальном виде: 0.13354*exp 10 3

Пример №2 . Представить двоичное число 101.10 2 в нормализованном виде, записать в 32-битом стандарте IEEE754.
Решение .
Представление двоичного числа с плавающей точкой в экспоненциальном нормализованном виде .
Сдвинем число на 2 разрядов вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа:
Мантисса M=1.011
Экспонента exp 2 =2
Преобразование двоичного нормализованного числа в 32 битный формат IEEE 754 .
Первый бит отводится для обозначения знака числа. Поскольку число положительное, то первый бит равен 0
Следующие 8 бит (с 2-го по 9-й) отведены под экспоненту.
Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта +127. Таким образом, наша экспонента: 2 + 127 = 129
Переведем экспоненту в двоичное представление.
Оставшиеся 23 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1 ≤ M Для перевода целой части необходимо умножить разряд числа на соответствующую ему степень разряда.
01100000000000000000000 = 2 22 *0 + 2 21 *1 + 2 20 *1 + 2 19 *0 + 2 18 *0 + 2 17 *0 + 2 16 *0 + 2 15 *0 + 2 14 *0 + 2 13 *0 + 2 12 *0 + 2 11 *0 + 2 10 *0 + 2 9 *0 + 2 8 *0 + 2 7 *0 + 2 6 *0 + 2 5 *0 + 2 4 *0 + 2 3 *0 + 2 2 *0 + 2 1 *0 + 2 0 *0 = 0 + 2097152 + 1048576 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 3145728
В десятичном коде мантисса выражается числом 3145728
В результате число 101.10 представленное в IEEE 754 c одинарной точностью равно.
Переведем в шестнадцатеричное представление.
Разделим исходный код на группы по 4 разряда.
2 = 0100 0000 1011 0000 0000 0000 0000 0000 2
Получаем число:
0100 0000 1011 0000 0000 0000 0000 0000 2 = 40B00000 16




Top