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

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

Переменные и константы

Данные, обрабатываемые компьютером, — это константы и переменные. Все переменные в языке С++ должны быть описаны явно. Описание переменной включает спецификацию типа, имя переменной, ряд необязательных модификаторов, задающих или особенности внутреннего представления переменно, или класс её хранения. При описании возможно задание начального значения переменной (инициализация переменной). Тип константы распознаётся компилятором по её записи в программе.

Понятие «тип» — одно из фундаментальных для любого языка программирования. В С++ все типы разбиваются на 4 категории: «пустой» тип (void); скалярный тип; тип «функция»; агрегированный тип (агрегат).

К скалярным относят арифметические типы, перечисления, указатели, ссылочный тип (reference type). К агрегированным типам относят массивы, структуры и объединения и классы.

Кроме того, типы могут быть разделены на основные (фундаментальные) и производные (derived). К основным типам относят void, char, int, float, и double вместе с вариантами short, long, signed и unsigned, применимыми к некоторым из них.

В С++ есть набор основных типов, которые соответствуют наиболее общим основным единицам памяти компьютера и наиболее общим основным способам их использования:

char, short int, int, long int для представления целых различных размеров;

float, double для представления чисел с плавающей точкой;

unsigned char, unsigned short int, unsigned int, unsigned long int для представления беззнаковых целых, логических значений, битовых массивов и т.п.

Производные типы — это указатели и ссылки на другие типы, массивы, функции, классы, структуры и объединения.

Данные типа int

Тип «целое» (integer) включает данные типа char, short, int И long вместе с их вариантами signed и unsigned. Данные типа int (переменные и константы) могут быть в одной из следующих возможных форм, указанных в табл.1.

Данные типа int для компилятора Borland C++ 3.1

Тип Размер, Бит Диапазон представления чисел
Минимум Максимум
Unsigned int Short int Int Long Unsigned long -32 768 -32 768 -2 147 483 648 65 535 32 767 32 767 2 147 483 647 4 294 967 295

Как следует из таблицы, short int и int являются синонимами. Синонимами являются типы unsigned int и unsigned.

Язык С++ поддерживает IEEE – стандарт внутреннего представления данных типа int (рис.1).

Int S Значение числа
14 0
unsigned int Значение числа
15 0
long int S Значение числа
30 0
long unsigned Значение числа
31 0

S — знаковый разряд числа

Рис.1. IEEE — стандарт внутреннего представления данных типа int

В компьютере с 16-ти разрядным процессором данные типа int занимают 2-а байта памяти (машинное слово), данные типа long занимают 4-ре байта. Старший бит знаковых типов int, short int, long int хранит знак числа. Если он равен нулю, число положительное, если он равен единице – число отрицательное. Положительные числа хранятся в памяти и вступают в операции в прямом коде, т.е. в обычном двоичном представлении числа. Отрицательные числа хранятся в памяти компьютера в дополнительном коде. Приведем правило получения дополнительного кода:

модуль отрицательного числа записывается в прямом коде в битах 14-0 или 30-0 «прижатым» вправо. В неиспользуемые старшие биты записываются нули;

в знаковый разряд бит 15 или 31 записывается 1;

формируется обратный код битов 14-0 или 30-0; для этого нуль заменяется единицей, а единица нулем;

к обратному коду числа прибавляется единица.

Например, обратный код числа –33 в формате int:

14 0
000.0000.0010.0001 Прямой код
111.1111.1101.1110 Обратный код
+
111.1111.1101.1111 Дополнительный код FFDEh

Константы типа int могут задаваться в десятичной, восьмеричной и шестнадцатеричной системой счисления. Признаком константы в шестнадцатеричной системе счисления являются 0х (0Х) в качестве первых ее символов. Запись такой константы может содержать цифры от 0 до 9, а также символы шестнадцатеричных цифр A-F. Любая константа, начинающаяся с нуля, рассматривается компилятором как заданная в восьмеричной системе счисления.

Если в записи константы встречается суффикс L (l), компилятор интерпретирует константу как long. Суффикс U(u) явно указывает на константу типа unsigned. Разрешается комбинировать оба суффикса в любом порядке, например 976LU.

При отсутствии суффиксов L(l) или U(u) точный тип константы определяется по ее записи (табл.2). Отрицательные константы получаются применением операции «унарный минус» к соответствующей положительной константе.

Переменная типа int объявляется с использованием ключевых слов unsigned, int, short, long. Синонимами будут сочетания ключевых слов: signed int и int; unsigned int и unsigned; short, sort int и signed short int; unsigned short и unsigned short int; long, long int и signed long int; unsigned long и unsigned long int.

При описании переменной ей может быть задано начальное значение. Например:

int i=0xabcd, j=04567, k=1;

Целые константы и их тип при отсутствии суффиксов для компилятора

Записанное значение константы Тип, принимаемый компилятором
Десятичные константы: От 0 до 32 767 От 32 768 до 2 147 483 647 От 2 147 483 648 до 4 294 967 295 > 4 294 967 295 Int Long Unsigned long Генерируется ошибка
Восьмеричные константы: От 00 до 077777 От 0100000 до 0177777 От 02000000 до 017777777777 От 020000000000 до 037777777777 > 037777777777 Int Unsigned int Long Unsigned long Генерируется ошибка
Шестнадцатиричные константы: От 0x0000 до 0x7FFF От 0x8000 до 0xFFFF От 0x10000 до 0x7FFFFFFF От 0x80000000 до 0xFFFFFFFF > 0xFFFFFFFF Int Unsigned int Long Unsigned long Генерируется ошибка

Если в описании опущен тип, он предполагается int. Например:

все определяют объект типа int.

Данные типа char

Данные типа char занимают в памяти 1 байт. Код от 0 до 255 в этом байте задает один из 256 возможных символов. Закрепление конкретных символов за кодами задается так называемыми кодовыми таблицами. Для персональных компьютеров наиболее распространена ASCII-таблица.

Тип char является типом «целое». Данные типа char могут рассматриваться компилятором и как данные со знаком (signed char), и как данные без знака (unsigned char).

Если тип char рассматривается как signed, то старший бит его кода определяет знак. В случае unsigned char все восемь бит рассматриваются как код, а диапазон возможных значений от 0 до 255.

Константа типа char представляет собой символ заключенный в одиночные кавычки, например ‘A’, ‘$’. Внутренний код байта, соответствующего константе, определяется по кодовой таблице.

Представление группы символьных констант описаны ниже в параграфе 2.5.3.

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

char symbol=’100’; /* прописная латинская P */

char name=’0’, first=’
’;

Данные с плавающей точкой

Язык Borland C++ поддерживает операции с плавающей точкой. Особенностью персональных компьютеров IBM PC является отсутствие в системе команд микропроцессора Intel, на базе которых они построены, операций над числами с плавающей точкой. Такие арифметические операции выполняет либо специальный сопроцессор математики с плавающей точкой (сопроцессоры 8087/80287/80387), либо при его отсутствии специальные стандартные подпрограммы (программная эмуляция сопроцессора).

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

Данные с плавающей точкой для компилятора Borland C++ 3.1

Читайте также:  Прошивка htc one dual sim 4pda
Тип Размер, бит Диапазон представления чисел(abs) Точность (десятичных цифр)
Максимум минимум
Float Double Long double 3.4*10 -38 1.7*10 -308 3.4*10 -4932 3.4*10 38 1.7*10 308 3.4*10 4932 19

Borland C++ поддерживает IEEE-стандарт, в соответствии с которым такие данные представляются в виде двух частей – мантиссы М и порядка Р числа в двоичной системе счисления:

Число бит для хранения мантиссы и порядка зависит от типа данных с плавающей точкой (рис. 2).

float: S P M
30 23 22 0
double: S P M
62 52 51 0
long double: S P M
78 64 63 0

S – знак числа (0 – для положительных, 1 – для отрицательных);

Р – сдвинутый порядок числа;

М – мантисса числа.

Рис. 2. IЕЕЕ-стандарт внутреннего представления данных с плавающей точкой.

Вещественное число в памяти хранится с нормализованной мантиссой. При нарушении нормализации мантиссу сдвигают влево до тех пор, пока старшей цифрой мантиссы не станет 1. Каждая операция сдвига сопровождается уменьшением порядка на 1. Но если мантисса всегда нормализована, то старшую едини­цу можно и не хранить в памяти. Это экономит один бит и, следовательно, увеличивает точность представления веществен­ных чисел. Эта единица присутствует неявно и называется неяв­ной единицей (implicit one). Отбрасывание старшей цифры мантиссы выполняется для форматов float и double, но не выполня­ется для long double.

Порядок числа хранится "сдвинутым", т. е. к нему при­бавляется число так, чтобы порядок был всегда неотрицатель­ным. Для чисел формата float прибавляется 127, для чисел формата double — 1023, для чисел формата long double -16383. Всегда неотрицательный порядок избавляет от необходимости выделять один бит для хранения знака порядка и упрощает выполнение операций сравнения порядков и арифметических операций над ними.

Например, число 15.375 (1111.011 в двоичной системе счисления) в формате float IEEE-стандарта записывается так:

Учитывая отбрасывание неявной единицы и сдвиг порядка, получаем внутреннее представление числа:

Р = 3+127 = 130(1000.0010 в двоичной системе счисления);

Переменные с плавающей точкой описываются с использованием спецификаторов типа float, double, long double.

Причина того, что представляется более чем один целый тип, более чем один беззнаковый тип и более чем один тип с плавающей точкой в том, чтобы дать возможность программисту воспользоваться характерными особенностями аппаратного обеспечения. На многих машинах между различными разновидностями основных типов существуют значительные различия в потребностях в памяти, временах доступа к памяти и временах вычислений. Размеры типов не указаны в стандарте языка а зависят от операционной системы, компилятора и разрядности процессора. В компьютерах с 16-ти разрядными процессорами int – 2 байта, в компьютерах с 32-х разрядными процессорами – 4 байта и т.д. В стандарте языка С++ указаны следующие соотношения относительно размеров основных типов:

I = = sizeof (char)

Последнее изменение этой страницы: 2017-02-05; Нарушение авторского права страницы

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

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

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

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

Рассмотрим подробнее это представление.

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

где b i – разряды двоичной записи целого числа (запись числа имеет вид b n–2 b n–3 . b 1 b , разделитель между целой и дробной частью числа зафиксирован после b, дробной части нет); S – разряд, отведенный для представления знака числа (для положительных чисел знак «+» кодируется цифрой 0, а знак «–» для отрицательных – цифрой 1); n – количество двоичных разрядов в разрядной сетке.

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

Например, число 1110=10112 в формате байта будет записано так:

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

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

Вычисляется прямой код:

затем выполняется инверсия полученного прямого кода (получается обратный код):

к обратному коду прибавляется 1:

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

Такая запись чисел ограничивает диапазоны значений, с которыми может работать компьютер. Например, для чисел в формате байта представимы значения от –128 (–2 7 ) до 127 (2 7 –1), для чисел в формате слова – от –32 768 (–2 15 ) до 32 767 (2 15 –1), а длинные целые числа в формате двойного слова могут принимать значения из диапазона от –2 147 483 648 до 2 147 483 647.

Если по условиям задачи используются только положительные значения, то их можно хранить в формате чисел без знака – старший разряд рассматривается как разряд, содержащий двоичную цифру записи числа, а не знак. При этом диапазон представимых положительных чисел увеличивается. Например, в байт можно записать числа от 0 до 255 (2 8 –1), а в слово – значения от 0 до 65535 (2 16 –1).

Особенности представления чисел в памяти компьютера могут привести и к ошибкам при обработке данных.

Рассмотрим пример. Предположим, что программа выполняет функции подсчета каких-либо объектов, и для хранения количества этих объектов используется представление данных в формате целого числа со знаком, записанного в байт. Рассмотрим ситуацию, когда количество объектов уже стало равным 127 и увеличивается еще на 1. Результат должен быть равен 128, но сможем ли мы его получить с помощью компьютера, если работаем со знаковыми числами в формате байта?

Читайте также:  Компьютер не заходит в биос при загрузке

Целое число 127 в памяти компьютера будет представлено цепочкой нулей и единиц 01111111. При добавлении единицы будет получено число 10000000:

(действия в двоичной системе счисления выполняются так же, как и в десятичной, но используются только две цифры, поэтому, если при сложении разрядов получается значение большее 1, происходит перенос в старший разряд). Но старший разряд является знаковым! Поэтому в результате сложения компьютер получит целое число –128, записанное своим дополнительным кодом. И именно это отрицательное число будет затем использовано во всех вычислениях.

Этот пример демонстрирует возможность появления ошибок при выполнении программ вследствие неправильно выбранных форматов для представления данных.

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

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

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

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

При использовании двоично-десятичной формы представления данных десятичные числа также представляются с помощью двоичных кодов, но в двоичную систему переводится не все число, а каждая его цифра отдельно. Так как используется всего десять десятичных цифр от 0 до 9, а для представления старшей цифры 9 достаточно четырех двоичных цифр (910=10012), то каждая десятичная цифра в записи числа кодируется четырьмя двоичными цифрами в его двоично-десятичном представлении в памяти компьютера. Например, число 105910 представляется в памяти компьютера следующим образом:

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

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

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

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

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

При использовании такой формы представления часть разрядов разрядной сетки, в которую помещается число в памяти компьютера, отводится для хранения порядка числа p, а остальные разряды – для хранения мантиссы M:

Порядок числа и его мантисса хранятся в двоичном коде, поэтому перед их определением число переводится в двоичную систему.

Точность вычислений зависит от длины мантиссы, а порядок числа определяет допустимый диапазон представления действительных чисел. Например, в IBM-совместимых персональных компьютерах используются три формата представления данных в форме с плавающей точкой (32 разряда, 64 разряда и 80 разрядов), позволяющие представлять три диапазона положительных вещественных чисел: от 1,5´10 ‑45 до 3,4´10 38 , от 5´10 324 до 1,7´10 308 и от 1,9´10 4951 до 1,1´10 4932 . Для представления положительных чисел в знаковый разряд записывается значение 0, а отрицательных чисел – 1. Порядок и мантисса записываются как целые числа.

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

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

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

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

Наиболее распространенной до последнего времени была кодировка ASCII (American Standard Code for Information Interchange). При использовании этой кодировки для представления каждого символа используется ровно 8 разрядов (один байт). Таким образом, имеется возможность кодирования 256 символов (они получают коды от 0 до 255). С помощью такой кодировки можно хранить только символы текста (без элементов форматирования или оформления).

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

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

ASCII позволяет закодировать только 256 символов. Это неудобно, так как существуют языки, где символов больше. Поэтому разрабатываются другие коды (наборы символов), например двухбайтовые наборы символов (DBCS – double-byte character sets). В этом двухбайтовом коде символы представляются одним и двумя байтами, что неудобно для организации обработки такой информации (для каждого символа сначала нужно определить длину его кода, а уж потом сам символ).

Наиболее перспективным для использования является Unicode – стандарт, разработанный несколькими фирмами (сначала – Apple и Xerox). В этом коде все символы состоят из 16 битов. Это позволяет кодировать свыше 65 тыс. символов (2 16 ). В этом коде для каждого алфавита определены свои кодовые позиции (code points), т.е. все 65536 символов (кодов) разбиты на отдельные группы (например: 0100-017F – европейские латинские, 0180-01FF – расширенные латинские, 0250-02AF – стандартные фонетические, 0370-03FF – греческий, 0400-04FF – кириллица и т.д.). Около 29 000 кодовых позиций пока не заняты, но зарезервированы для использования. Таким образом, Unicode допускает обмен данными на разных языках – каждому коду соответствует единственный символ, коды не пересекаются для разных языков.

Читайте также:  Игра пароль на телефон

На Unicode целиком построена операционная система Windows NT. У Windows 95/98 16‑битное «наследство», поэтому вся внутренняя работа в этой ОС построена на использовании ANSI-строк (ANSI – American National Standards Institute), в которых каждый символ записан в один байт.

ANSI-текст (или текст ASCII) – это текст без форматирования (с ним работает, например, приложение «Блокнот» в Windows 9х).

Если для представления информации в разных информационных системах используются разные кодировки, эти программы «не поймут» друг друга, поэтому может оказаться, что данные, подготовленные в одном месте, не смогут прочитать в другом. Например, текст, введенный с помощью программы «Блокнот» в Windows, нельзя будет прочитать в MS‑DOS.

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

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

• Представление числовой информации.

• Представления символьной информации.

• Представление графической информации.

По своему назначению компьютер — универсальное, программно-управляемое

автоматическое устройство для работы с информацией. Из свойства универсальности следует

то, что компьютер осуществляет все три основных типа информационных процессов: хранение,

передачу и обработку информации. Современные компьютеры работают со всеми видами

информации: числовой символьной, графической, звуковой. Информация, хранимая в памяти

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

Как уже говорилось в предыдущем разделе, для представления всех видов данных в

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

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

речь идет о внутреннем представлении данных, в то время как внешнее представление на

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

Представление числовой информации. Исторически первым видом данных, с которым

стали работать компьютеры, были числа. Первые ЭВМ использовались исключительно для

математических расчетов. В соответствии с принципами Джона фон Неймана, ЭВМ выполняет

расчеты в двоичной системе счисления. Вопрос о внутреннем (машинном) представлении чисел

рассмотрим несколько подробнее, чем это делается в учебниках.

Структурные единицы памяти компьютера — бит, байт и машинное слово. Причем

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

слова зависит от типа процессора ЭВМ. Если машинное слово для данного компьютера равно

одному байту, то такую машину называют 8-разрядной (8 бит); если машинное слово состоит из

2 байтов, то это 16-разрядный компьютер; 4-байтовое слово у 32-разрядных ЭВМ. Обсуждение

вопроса о том, как представляются числа в памяти ЭВМ, будем вести на примере 16-разрядной

Числа в памяти ЭВМ хранятся в двух форматах: в формате с фиксированной точкой и в

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

разделения целой и дробной части числа. Формат с фиксированной точкой используется для

хранения в памяти целых чисел. В этом случае число занимает одно машинное слово памяти

(16 бит). Чтобы получить внутреннее представление целого положительного числа N в форме с

фиксированной точкой нужно:

1) перевести число N -в двоичную систему счисления;

2) полученный результат дополнить слева незначащими нулями до 16 разрядов.

Например, N = 1б0710= 110010001112. Внутреннее представление этого числа в

машинном слове будет следующим:

0000 0110 0100 0111

В сжатой шестнадцатеричной форме этот код запишется так: 0647. Двоичные разряды в

машинном слове нумеруются от 0 до 15 справа налево. Старший 15-й разряд в машинном

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

в такой форме равно:

0111 1111 1111 11112 = 7РРР16 = (215- 1) = 3276710.

Для записи внутреннего представления целого отрицательного

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

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

3) к полученному числу прибавить 1.

Определим по этим правилам внутреннее представление числа -1б0710.

2) 1111 1001 1011 1000

1111 1001 1011 1001 — результат

Шестнадцатеричная форма результата: F9В9.

Описанный способ представления целого отрицательного числа называют

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

1. Следовательно, он указывает на знак числа и поэтому называется знаковым разрядом.

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

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

. Как это происходит?

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

переполнением. Для вещественных чисел такая ситуация является аварийной. Процессор ее

обнаруживает и прекращает работу (прерывание по переполнению). Однако при вычислениях с

целыми числами переполнение не фиксируется как аварийная ситуация и прерывания не

Диапазон представления целых чисел в 16-разрядном машинном слове:

В общем случае для k-разрядного машинного слова этот диапазон следующий:

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

значений, так и значений с дробной частью. В математике такие числа называют

действительными, в программировании — вещественными.

Формат с плавающей точкой предполагает представление вещественного числа R в

форме произведения мантиссы (т) на основание системы счисления (n) в некоторой целой

степени, которую называют порядком (p):

Порядок указывает, на какое количество позиций и в каком направлении должна

сместиться («переплыть») точка в мантиссе.

Например, 25,32410 = 0,25324 х 102. Однако справедливы и следующие равенства:

25,324 = 2,5324х 10′ = 0,0025324х 104 и т.д.

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

не было неоднозначности, в ЭВМ используют нормализованную Y_______Xqzформу с плавающей точкой.

Мантисса в нормализованной форме должна удовлетворять условию:

Ссылка на основную публикацию
Почему телефон ночью быстро разряжается
Если телефон стал быстро разряжаться, это еще не значит, что виновата батарея. В 70% случаев пользователь сам настроил устройство таким...
Почему имя пользователя недоступно в инстаграме
Как быть, если такое имя пользователя Instagram уже занято, но соответствующий ему аккаунт кажется неактивным? Если имя пользователя, которое вы...
Почему индукционная плита щелкает
Если индукционная плита щелкает при работе, рекомендуется ознакомиться с особенностями работы техники. При уверенности, что устройство вышло из строя, не...
Почему телефон самостоятельно перезагружается
Постоянная и не запланированная перезагрузка смартфона на Android – раздражающая ошибка. Она порождает плохое настроение и желание расстаться с гаджетом....
Adblock detector