Учитель информатики

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

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

Вещественное число (число с плавающей запятой) состоит из двух частей: мантиссы и порядка. Например, число в десятичной системе счисления 0,000123 можно записать одним из следующих способов: 0.0000123*10; 0,123*10 -3 ; 1,23*10 -4 и т.д. Аналогично 78900=0,789*10 5 =78,9*10 3 и т.д. Термин “число с плавающей запятой” и связан с тем, что десятичная запятая перемещается (плывёт) по числу. Из такого рода различных записей в десятичной системе счисления нас будет интересовать нормализованное число, соответственно 0,123*10 -3 и 0,789*10 5 . Первая его часть называется мантиссой (0,123 и 0,789), а числа -3 и 5 – порядком.

Аналогично различные варианты записи (на бумаге, а не в памяти компьютера) вещественного числа имеют место и в двоичной системе счисления. Например, рассмотрим десятичное число 12,375. Для его перевода в двоичную систему счисления отдельно переводим целую часть (см. гл. 4 файла Lections1Semestr) и отдельно дробную часть. В качестве вспомогательной системы счисления можно использовать шестнадцатеричную. Для перевода дробной части из 10 с.с в 16 с.с выполняем следующее:

дробную часть числа умножаем на 16;

полученную целую часть результата (число от 0 до 15) переводим в 16-ю с.с и берём в качестве первой после запятой 16-й цифры результата;

дробную часть результата, если она не равна нулю, повторно умножаем на 16;

полученную целую часть переводим в 16-ю с.с и берём в качестве следующей 16-й цифры;

дробную часть результата снова умножаем на 16;

это продолжаем, пока не наступит одна из следующих ситуаций:

a) на некотором шаге, не обязательно в самом начале, получим в дробной части нуль. В этом случае перевод выполнили точно. Это имеет место в нашем примере: 0,375*16=6.0;

b) получим в дробной части число, которое было раньше. Например, 0,15*16=2,4; 0,4*16=6,4. Если продолжать умножение 0,4*16, будем получать одно и то же, т. е 6,4. В таком случае получаем следующий результат: 0,1510= 0,2666…16=0,2(6)16. Круглые скобки означают, что записанное в них одно или несколько разных чисел будут повторяться бесконечное число раз. Говорят, что это число в периоде, т.е. 6 в периоде;

c) если не получаем ни нуль, ни повторяющиеся числа, то ограничиваемся заданным предварительно количеством двоичных или шестнадцатеричных цифр. Для числа типа float необходимо получить 24 двоичные цифры, считая от первой значащей, или не менее 7 шестнадцатеричных цифр, не считая первые 16-е нули.

Для перевода дробной части из 16-й в 2-ю с.с. записываем каждую 16-ю (но не 10-ю!) цифру в виде тетрады, т.е. четырёх двоичных цифр. Получим 12.37510=С.616=1100,0110. При этом последнюю цифру ‘0’ можем не писать. Как и в 10-й с.с., этот нуль незначащий. Остальные нули рядом с десятичной запятой обязательны!

Это двоичное число, как и в 10-й с.с., записать можно по-разному: 11,00011*2 2 ; 1100011*2 -3 ; 1.100011*2 3 . Из приведенных вариантов нас будет интересовать последняя нормализованная запись, в которой в целой части записана одна первая значащая единица. Получим: m= памяти не хранится, но 1.100011; p=310=112, где m —нормализованная мантисса, p — порядок в 2 с.с.

Пусть число объявлено как float. Тогда 4 байта (32 бита) распределяются следующим образом:

один самый “левый” бит отводится под знак мантиссы, или, что то же самое, под знак всего числа. Записывается 0, если мантисса, а, значит и само вещественное число, положительное, и 1 в противном случае. Никакого дополнительного кода для отрицательного вещественного числа, как это было для целых чисел, получать не надо;

следующие 8 разрядов (бит) занимает изменённый порядок записи числа в 2-й с.с., который называется характеристикой числа. Обозначим её x. Знак порядка нигде не хранится. Чтобы он всегда был неотрицательным, порядок увеличивается на 12710, т. е. x=p+12710=p+7F16. (1)

Для нашего примера здесь будет храниться число x=310+12710= 13010=8216=100000102. Это же можно вычислить и так: x=316+7F16=8216 =100000102 ;

последние 23 (32-1-8) разряда занимает мантисса. При этом целая её часть, равная 1, в памяти не хранится, но учитывается при вычислениях. Если дробная часть числа переведена в 16-ю, а, значит и в двоичную с.с не точно, т. е. имели место варианты b) и c) (см. выше перевод), последняя 2-я цифра округляется по обычным правилам. Если первая отбрасываемая 2-я цифра равна 1, то прибавляем двоичную единицу, в противном случае оставляем без изменения.

Таким образом, число 12,375 в формате float будет представлено следующим образом: 01000001010001100000000000000000. Иногда в литературе можно встретить шестнадцатеричную запись этого результата: 4146000016.

Упражнение. Представить число -0.01 как число с плавающей точкой в формате float.

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

Так как под мантиссу отводится 23 разряда, то должны получить 25 двоичных цифр, не считая первых после десятичной точки подряд идущих нулей. Почему? По правилу нормализации самая первая значащая единица (в примере в десятичной цифре 2) в память не записывается, а ещё одна дополнительная двоичная цифра нужна для того, чтобы определить, как округлять число. Так как первая отбрасываемая двоичная цифра =0, то получаем

Если число “маленькое”, т.е. целая часть =0, а в дробной части после запятой несколько подряд идущих нулей, то получим отрицательный порядок. Так как 0.0000001010001111010111000010102 = 1.01000111101011100001010*2 -7 ,

В результате получим ответ: 10111100001000111101011100001010.

Рассмотрим обратную задачу. Пусть в ячейке размером 4 байта хранится следующая последовательность нулей и единиц, шестнадцатеричное представление которой такое: С215999A16. Известно, что здесь хранится вещественное число, т.е. в программе записано, например, объявление: float a. Что это за число в 10-й системе счисления?

Для ответа на этот вопрос в обратном порядке выполняем действия, описанные выше.

1) Запишем двоичное представление числа: 11000010000101011001100110011010.

2) Единица в старшем бите (самая “левая”) означает, что всё вещественное число отрицательное.

3) В следующих 8 битах находится характеристика числа, т.е. x=100001002=8416. Из формулы (1) получаем двоичный порядок числа: p=x-7F16=8416-7F16 =516=510.

4) Из последних 23 разрядов получаем m=0.001010110011001100110102.

5) Поэтому искомое число

a=1.00101011001100110011010*2 5 =100101.0110011001100110102@25.(6) 16@37.410.

Перевод дробной части выполняли следующим образом:

0.(6) 16 = 0.6666616 = 6*16 -1 +6*16 -2 +6*16 -3 +6*16 -4 +6*16 -5 @0.410.

Т.к. это отрицательное число, то получаем ответ: – 37.410

5.2. Объявление объединения.(+)

Объявление типа объединения, которые ещё называют смеси, похоже на объявление структурного типа. Только вместо ключевого слова struct используется union. Как и для структурной переменной, возможны три способа объявления переменной типа объединения: раздельное, совместное и анонимное (см. 1.1).

Для изучения объединения сначала рассмотрим следующий код для работы со структурой.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: На стипендию можно купить что-нибудь, но не больше. 9122 – | 7290 – или читать все.

91.146.8.87 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Ключевые слова:

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

1.2.1. Представление целых чисел

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

Рис. 1.2. Ячейка памяти

Для компьютерного представления целых чисел используется несколько различных способов, отличающихся друг от друга количеством разрядов (под целые числа обычно отводится 8, 16, 32 или 64 разряда) и наличием или отсутствием знакового разряда. Беззнаковое представление можно использовать только для неотрицательных целых чисел, отрицательные числа представляются только в знаковом виде.

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

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

Ниже приведены максимальные значения для беззнаковых целых n-разрядных чисел:

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

Пример 1. Число 5310 = 1101012 в восьмиразрядном представлении имеет вид:

Это же число 53 в шестнадцати разрядах будет записано следующим образом:

При представлении со знаком самый старший (левый) разряд отводится под знак числа, остальные разряды — под само число. Если число положительное, то в знаковый разряд помещается 0, если число отрицательное — 1. Такое представление чисел называется прямым кодом.

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

На сайте Федерального центра информационно-образовательных ресурсов (http://fcior.edu.ru/) размещён информационный модуль «Число и его компьютерный код». С помощью этого ресурса вы можете получить дополнительную информацию по изучаемой теме.

Для выполнения операций с отрицательными числами используется дополнительный код, позволяющий заменить операцию вычитания сложением. Узнать алгоритм образования дополнительного кода вы можете с помощью информационного модуля «Дополнительный код», размещённого на сайте Федерального центра информационно-образовательных ресурсов (http://fcior.edu.ru/).

1.2.2. Представление вещественных чисел

Любое вещественное число А может быть записано в экспоненциальной форме:

где:

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

Например, число 472 ООО ООО может быть представлено так: 4,72 • 10 8 , 47,2 • 10 7 , 472,0 • 10 6 и т. д.

С экспоненциальной формой записи чисел вы могли встречаться при выполнении вычислений с помощью калькулятора, когда в качестве ответа получали записи следующего вида: 4.72Е+8.

Здесь знак «Е» обозначает основание десятичной системы счисления и читается как «умножить на десять в степени».

Из приведённого выше примера видно, что положение запятой в записи числа может изменяться.

Для единообразия мантиссу обычно записывают как правильную дробь, имеющую после запятой цифру, отличную от нуля. В этом случае число 472 ООО ООО будет представлено как 0,472 • 10 9 .

Вещественное число может занимать в памяти компьютера 32 или 64 разряда. При этом выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.

Пример:

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

Максимальное значение порядка числа для приведённого выше примера составляет 11111112 = 12710, и, следовательно, максимальное значение числа:

0,11111111111111111111111 • 10 1111111

Попытайтесь самостоятельно выяснить, каков десятичный эквивалент этой величины.

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

САМОЕ ГЛАВНОЕ

Для компьютерного представления целых чисел используются несколько различных способов, отличающихся друг от друга количеством разрядов (8, 16, 32 или 64) и наличием или отсутствием знакового разряда.

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

При представлении со знаком самый старший разряд отводится под знак числа, остальные разряды — под само число. Бели число положительное, то в знаковый разряд помещается 0, если число отрицательное, то 1. Положительные числа хранятся в компьютере в прямом коде, отрицательные — в дополнительном.

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

где:

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

Вопросы и задания

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

2. Как в памяти компьютера представляются целые положительные и отрицательные числа?

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

4. Представьте число 6310 в беззнаковом 8-разрядном формате.

5. Найдите десятичные эквиваленты чисел по их прямым кодам, записанным в 8-разрядном формате со знаком:

а) 01001100;
б) 00010101.

6. Какие из чисел 4438, 1010102, 25610 можно сохранить в 8-разрядном формате?

7. Запишите следующие числа в естественной форме:

а) 0,3800456 • 10 2 ;
б) 0,245 • 10 -3 ;
в) 1,256900Е+5;
г) 9,569120Е-3.

8. Запишите число 2010,010210 пятью различными способами в экспоненциальной форме.

9. Запишите следующие числа в экспоненциальной форме с нормализованной мантиссой — правильной дробью, имеющей после запятой цифру, отличную от нуля:

10. Изобразите схему, связывающую основные понятия, рассмотренные в данном параграфе.

1. Представление целых чисел

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

И хотя любое целое число можно рассматривать как вещественное, но с нулевой дробной частью, предусмотрены специальные способы представления целых чисел. Это обеспечивает: эффективное расходование памяти, повышение быстродействия, повышение точности вычислений за счёт введения операции деления нацело с остатком.

Для компьютерного представления целых чисел используется несколько различных способов, отличающихся друг от друга количеством разрядов (под целые числа обычно отводится 8, 16, 32 или 64 разряда) и наличием или отсутствием знакового разряда.

Беззнаковое представление можно использовать только для неотрицательных целых чисел.

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

Например, десятичные числа 130 и 39 в восьмиразрядном представлении будут иметь вид:

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

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

Представление числа в привычной для человека форме «знак-величина», при которой старший разряд ячейки отводится под знак, а остальные разряды — под цифры числа, называется прямым кодом.

Например, прямые коды чисел 48 и -52 для восьмиразрядной ячейки равны:

Минимальное отрицательное число, которое можно записать в знаковом представлении в n разрядах, равно 2 n-1 . Максимальное положительное число, которое можно записать в знаковом представлении в n разрядах, равно 2 n-1 — 1. Ниже приведены диапазоны значений для знаковых представлений целых чисел в ячейках с различной разрядностью:

В математике множество целых чисел бесконечно.

Компьютер работает с ограниченным множеством целых чисел.

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

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

Чтобы понять сущность дополнительного кода, рассмотрим работу реверсивного счётчика, последовательность показаний которого можно представить в виде замкнутого кольца из чисел (рис. 3.5).

Рис. 3.5. Реверсивный счётчик

При возрастании показаний счётчика до максимального, например до 999, следующими его состояниями должны быть 1000, 1001, 1002 и т. д. Но для изображения старшей единицы в счётчике не хватает разряда, происходит переполнение разрядной сетки. Поэтому мы увидим 000, 001, 002 и т. д.

При убывании показаний счётчика после состояния 000 будут идти 999, 998, 997 и т. д. Но после достижения нуля последовательное вычитание единицы должно давать -1, -2, -3 и т. д.

Будем рассматривать числа 999, 998, 997 как коды чисел -1, -2, -3 и проверим на их примере соотношение: у + (-у) = 0:

1 + 999 = 1000;
2 + 998 = 1000;
3 + 997 = 1000.

С учётом того что единица переполнения теряется, мы, сложив число и код противоположного ему числа, получаем ноль!

Вот ещё несколько примеров:

5-2 = 5 + [-2] = 5 + 998 = 1003;
7-5 = 7 + [-5] = 7 + 995 = 1002.

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

Таким образом, дополнительный код положительного числа совпадает с этим числом, а для отрицательного числа он равен дополнению его величины до числа q n , возникающего при переполнении разрядной сетки. Здесь q — основание системы счисления, n — число разрядов в разрядной сетке.

Рассмотрим алгоритм получения дополнительного n-разрядного кода отрицательного числа:

1) модуль числа представить прямым кодом в n двоичных разрядах;
2) значения всех разрядов инвертировать (все нули заменить единицами, а единицы — нулями);
3) к полученному представлению, рассматриваемому как n-разрядное неотрицательное двоичное число, прибавить единицу.

Пример 1. Найдём 16-разрядный дополнительный код отрицательного числа -201710.

Использование дополнительного кода позволяет свести операцию вычитания чисел к операции поразрядного сложения кодов этих чисел.

Пример 2. Как известно, 48 — 2017 = -1969.

Выполним эту операцию в 16-разрядных машинных кодах.

Нам потребуются прямой код числа 48 и дополнительный код числа -2017.

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

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

Получаем: -111101100012 = -1969.

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector