Форматы представления данных в эвм логические коды. Форматы представления данных в памяти ЭВМ

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

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

В непозиционных системах количественное значение разряда определя­ется только его изображением и не зависит от его места (позиции ) в числе. В ней вводится ряд символов для представления основных чисел, а остальные числа - результат их сложения и вычитания. Основные символы для обозна­чения десятичных разрядов в римской системе счисления: I – один, X – де­сять, C – сто, M – тысяча и их половины V – пять, L – пятьдесят, D – пять­сот. Натуральные числа записываются при помощи повторения этих цифр (например, II – два, III – три, XXX – тридцать, CC – двести ). Если же боль­шая цифра стоит перед меньшей цифрой, то они складываются, если на­обо­рот – вычитаются (например, VII – семь, IX – девять ). В непозиционных системах счисления не представля­ются дробные и отрица­тель­ные числа, по­этому нас будут интересовать только по­зицион­ные системы счисле­ния.

Система счисления называется позиционной, если значение числа в ней оп­ределяется как символами, принятыми в системе, так и положением (пози­цией ) этих символов в числе. Напри­мер:

123,45 = 1∙10 2 + 2∙10 1 + 3∙10 0 + 4∙10 –1 + 5∙10 –2 ,

или, в общем виде:

X (q) = x n -1 q n -1 + x n -2 q n -2 + … + x 1 q 1 + x 0 q 0 + x -1 q -1 + x -2 q -2 + … + x -m q –m .

Здесь X (q) – запись числа в системе счисления с основанием q ;

x I – натуральные числа меньше q, т.е. цифры;

n – число разрядов целой части;



m – число разрядов дробной части.

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

X (q) = x n-1 x n-2 x

1 x 0 , x -1 x -2 x -m .

В информатике, вследствие применения электронных средств вычисли­тельной техники, большое значение имеет двоичная система счисления, q = 2. На ранних этапах развития вычислительной техники арифметические операции с действительными числами производились в двоичной системе ввиду про­стоты их реализации в электронных схемах вычислительных машин. Отметим, что принци­п действия базовых элементов цифровых вычислительных машин осно­ван на двух устойчивых со­стояниях - проводится или нет электрический ток, или в каком направлении намагничен магнитный носитель и т.д. и для записи двоичного числа достаточно использовать только две цифры 0 и 1, соответствующих каждому из состояний. Таблица сложения и таб­лица ум­но­жения в двоичной системе будет иметь по четыре пра­вила. И для реализации поразрядной арифметики в компьютере потребуется вместо двух таблиц по сто правил в десятичной системе счисления две таб­лицы по четыре правила в двоичной.

0 + 0 = 0 0 * 0 = 0
0 + 1 = 1 0 * 1 = 0
1 + 0 = 1 1 * 0 = 0
1 + 1 = 10 1 * 1 = 1

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

Так как десятичная система для нас удобна и привычна, все арифмети­ческие действия мы делаем в ней, и преобразование чисел из произвольной недесятичной (q ≠ 10) на основе разложения по степеням q . Преобразование из десятичной в прочие системы счисления производится с помощью правил умножения и деления. При этом целая и дробная части переводятся отдельно.

АЛФАВИТ 2-чной системы счисления: 0 1

АЛФАВИТ 8-ричной системы счисления: 0 1 2 3 4 5 6 7

АЛФАВИТ 10-чной системы счисления: 0 1 2 3 4 5 6 7 8 9

АЛФАВИТ 16-ричной системы счисления: 0 1 2 3 4 5 6 7 8 9 A B C D E F

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

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

Набрав число и щелкнув на одном из переключателей Hex , Dec , Oct или Bin , получим представление этого числа в соответствующей системе.

Как отмечалось, двоичная сис­тема счисле­ния, будучи естественной для ЭВМ, не удобна для восприятия чело­ве­ком. Большое количе­ство разря­дов двоичного числа по сравнению с соответ­ст­вующим десятичным, однооб­раз­ное чередование единиц и нулей является ис­точником ошибок и затруд­нений чтения двоичного числа. Для удобства записи и чтения двоичных чи­сел (но не для работы цифровых вычислительных машин! ), необходима бо­лее удоб­ная для записи и чтения система счис­ления. Такими являются сис­темы с ос­нова­нием 2 3 = 8 и 2 4 = 16, т.е. восьмеричная и шестнадцатеричная сис­темы счисления. Названные системы удобны тем, что в них, с одной сто­роны, обеспечивается чрезвычайно лег­кий перевод из двоичной сис­темы (а также обратный перевод ), т.к. основание системы – степень числа 2, с дру­гой - со­храняется компактный вид числа. Восьмеричная система широко ис­пользо­валась для записи машин­ных программ в ЭВМ 1 и 2 поколений. В на­стоящее время используется, в ос­нов­ном,

шестнадцатеричная система. Приведем пример соответствия шестна­дца­теричной и двоичной системы:

Пример для тетрад :

0000 = 0; 0001 = 1; 0010 = 2; 0011 = 3; 0100 = 4; 0101 = 5; 0110 = 6; 0111 = 7; 1000 = 8; 1001 = 9; 1010 = A; 1011 = B; 1100 = C; 1101 = D; 1110 = E; 1111 = F.

В ЭВМ используется представление информации в виде «машин­ного слова», длина которого равна некоторому числу бит, характерному для дан­ного типа ЭВМ. В ЭВМ первых поколений использовались ма­шинные слова различной длины, например 45 бит и т.д., то есть не равные це­лому числу байт. В современных компьютерах длина слова обычно 4 или 8 байт (в пер­вых моделях персональных компьютеров было 1 или 2 байта ).

Слово в машинной памяти

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

старший байт младший байт

Единицы измерения количества и объема информации.

N – формула Хартли.

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

Количество информации.

Поскольку каждый бит может принимать одно из двух значений (0 или 1), то последовательность из i – битов может принимать N=2 ͥ различных значений => для любого N – значного алфавита (т.е.состоящего из N знаков), количество бит кот. требуется для представления любого из этих знаков, вычисляется по формуле: i = log2 N. Эта величина принимается в качестве количества информации, содержащейся в сообщении, состоящем из одного знака N-значного алфавита. Мощность – количество знаков в алфавите. Из формулы Хартли следует, что количество информации, содержащейся в сообщении, состоящем из М-знаков (m-разрядное сообщение), когда каждый знак равновероятно взят из алфавита мощностью N равно i = m*log2 N.

Например:

В слове ИНФОРМАТИКА 11 знаков, т.е. m=11. Если используется 32-значный алфавит, то получаем: i=11* log2 32 = 11*5 = 55.

Объём информации.

В отличие от количества, объём информации, записанный двоичными знаками в памяти компьютера или на внешнем носителе, вычисляется по количеству требуемых для такой записи двоичных знаков. Обычно в качестве наименьшей единицы измерения объёма информации используется байт, состоящий из 8 бит => каждый байт может принимать 256 (2^8) различных значений, при этом наименьшим будет 00000000, а наибольшим 11111111. Байты объединяются в более крупные наборы в зависимости от цели использования (ввод, вывод и другие). Для измерения объёма памяти используются и более крупные единицы измерения (Кб, Мб и Гб). Переход от меньшей единицы измерения к большей осуществляется с помощью коэффициента 2^10 = 1024.

1 Кб = 1024 байта

1 Мб = 1024 Кб

1 Гб = 1024 Мб

Для измерения памяти большего объема используют Терабайт (Тб) = 1024 Гб; и Петабайт (Пб) = 1024 Тб.

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


Системы счисления.

Число – это знак, обозначающий определенное количество чего-либо.

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

Например:

В Римской системе V-пять, L-пятьдесят, X-десять. Недостатком таких систем является сложность записи чисел и отсутствие стандартных правил.

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

Например:

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

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

(10.10.2012 г.)

Например, рассмотрим представление чисел в 16-ричной системе счисления. Тогда основание равно 16. Цифры: первые десять цифр (от 0 до 9) мы можем позаимствовать из 10-ричной системы счисления, остальные шесть цифр, соответствующих числовым значениям от 10 до 15 обозначим A, B, C, D, E, F. При этом A = цифра 10, B = цифра 11 и т.д. F = цифра 15. Мы вынуждены сделать такое обозначение в связи с тем, что нельзя цифры обозначать с помощью с помощью других цифр.

Арифметические действия в любой системе счисления выполняется аналогично тому, как это делается в десятеричной системе, следует лишь учитывать величину основания. Например: 15+14=31 (восьмеричная система счисления). В компьютере все данные представляются в двоичной системе счисления. Например:

Четырьмя битами можно представить 16 десятичных чисел (от 0 до 15). В качестве краткой записи при просмотре или изменении двоичных данных используется 16-ричная система счисления. Программы , обеспечивающие «непосредственную» работу человека с данными, хранящимися в памяти компьютера, при взаимодействии с человеком автоматически преобразовывают двоичное представлении данных в 16-ричное и обратно.

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

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

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

В непозиционных системах количественное значение разряда определя­ется только его изображением и не зависит от его места (позиции ) в числе. В ней вводится ряд символов для представления базовых чисел, а остальные числа - результат их сложения и вычитания. Основные символы для обозна­чения десятичных разрядов в римской системе счисления: I – один, X – де­сять, C – сто, M – тысяча и их половины V – пять, L – пятьдесят, D – пять­сот. Натуральные числа записываются при помощи повторения этих цифр (к примеру, II – два, III – три, XXX – тридцать, CC – двести ). В случае если же боль­шая цифра стоит перед меньшей цифрой, то они складываются, если на­обо­рот – вычитаются (к примеру, VII – семь, IX – девять ). В непозиционных системах счисления не представля­ются дробные и отрица­тель­ные числа, по­этому нас будут интересовать только по­зицион­ные системы счисле­ния.

Система счисления принято называть позиционной, если значение числа в ней оп­ределяется как символами, принятыми в системе, так и положением (пози­цией ) этих символов в числе. Напри­мер:

123,45 = 1∙10 2 + 2∙10 1 + 3∙10 0 + 4∙10 –1 + 5∙10 –2 ,

или, в общем виде:

X (q) = x n -1 q n -1 + x n -2 q n -2 + … + x 1 q 1 + x 0 q 0 + x -1 q -1 + x -2 q -2 + … + x -m q –m .

Здесь X (q) – запись числа в системе счисления с основанием q ;

x I – натуральные числа меньше q, ᴛ.ᴇ. цифры;

n – число разрядов целой части;

m – число разрядов дробной части.

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

X (q) = x n-1 x n-2 x

1 x 0 , x -1 x -2 x -m .

В информатике, вследствие применения электронных средств вычисли­тельной техники, большое значение имеет двоичная система счисления, q = 2. На ранних этапах развития вычислительной техники арифметические операции с действительными числами производились в двоичной системе ввиду про­стоты их реализации в электронных схемах вычислительных машин. Отметим, что принци­п действия базовых элементов цифровых вычислительных машин осно­ван на двух устойчивых со­стояниях - проводится или нет электрический ток, или в каком направлении намагничен магнитный носитель и т.д. и для записи двоичного числа достаточно использовать только две цифры 0 и 1, соответствующих каждому из состояний. Таблица сложения и таб­лица ум­но­жения в двоичной системе будет иметь по четыре пра­вила. И для реализации поразрядной арифметики в компьютере потребуется вместо двух таблиц по сто правил в десятичной системе счисления две таб­лицы по четыре правила в двоичной.

0 + 0 = 0 0 * 0 = 0
0 + 1 = 1 0 * 1 = 0
1 + 0 = 1 1 * 0 = 0
1 + 1 = 10 1 * 1 = 1

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

Так как десятичная система для нас удобна и привычна, всœе арифмети­ческие действия мы делаем в ней, и преобразование чисел из произвольной недесятичной (q ≠ 10) на основе разложения по степеням q . Преобразование из десятичной в прочие системы счисления производится с помощью правил умножения и делœения. При этом целая и дробная части переводятся отдельно.

АЛФАВИТ 2-чной системы счисления: 0 1

АЛФАВИТ 8-ричной системы счисления: 0 1 2 3 4 5 6 7

АЛФАВИТ 10-чной системы счисления: 0 1 2 3 4 5 6 7 8 9

АЛФАВИТ 16-ричной системы счисления: 0 1 2 3 4 5 6 7 8 9 A B C D E F

Для перевода числа из десятичной системы счисления в любую другую систему счисления нужно делить «до упора» это число на основание той системы (основание системы - ϶ᴛᴏ количество символов в ее алфавите ), в которую переводим число, а потом прочесть остатки справа на­лево. Для пе­ревода числа из любой системы счисления в десятичную нужно умножить содержимое каждого разряда на основание системы в степени рав­ной поряд­ковому номеру разряда и всё сложить. Перевод числа из восьмеричной сис­темы в двоичную осуществляется заменой слева направо восьмеричной цифры тремя двоичными цифрами. Перевод числа из двоичной системы счисления в восьмеричную осуще­ствляется заменой справа налево каждой триады двоичных цифр на одну восьмеричную цифру.

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

Набрав число и щелкнув на одном из переключателœей Hex , Dec , Oct или Bin , получим представление этого числа в соответствующей системе.

Как отмечалось, двоичная сис­тема счисле­ния, будучи естественной для ЭВМ, не удобна для восприятия чело­ве­ком. Большое количе­ство разря­дов двоичного числа по сравнению с соответ­ст­вующим десятичным, однооб­раз­ное чередование единиц и нулей является ис­точником ошибок и затруд­нений чтения двоичного числа. Для удобства записи и чтения двоичных чи­сел (но не для работы цифровых вычислительных машин! ), необходима бо­лее удоб­ная для записи и чтения система счис­ления. Такими являются сис­темы с ос­нова­нием 2 3 = 8 и 2 4 = 16, ᴛ.ᴇ. восьмеричная и шестнадцатеричная сис­темы счисления. Названные системы удобны тем, что в них, с одной сто­роны, обеспечивается чрезвычайно лег­кий перевод из двоичной сис­темы (а также обратный перевод ), т.к. основание системы – степень числа 2, с дру­гой - со­храняется компактный вид числа. Восьмеричная система широко ис­пользо­валась для записи машин­ных программ в ЭВМ 1 и 2 поколений. В на­стоящее время используется, в ос­нов­ном,

шестнадцатеричная система. Приведем пример соответствия шестна­дца­теричной и двоичной системы:

Пример для тетрад :

0000 = 0; 0001 = 1; 0010 = 2; 0011 = 3; 0100 = 4; 0101 = 5; 0110 = 6; 0111 = 7; 1000 = 8; 1001 = 9; 1010 = A; 1011 = B; 1100 = C; 1101 = D; 1110 = E; 1111 = F.

В ЭВМ используется представление информации в виде «машин­ного слова», длина которого равна некоторому числу бит, характерному для дан­ного типа ЭВМ. В ЭВМ первых поколений использовались ма­шинные слова различной длины, к примеру 45 бит и т.д., то есть не равные це­лому числу байт. В современных компьютерах длина слова обычно 4 или 8 байт (в пер­вых моделях персональных компьютеров было 1 или 2 байта ).

Слово в машинной памяти

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Для представления информации в памяти ЭВМ (как числовой, так и нечисловой) используется двоичный способ кодирования. Элементарная ячейка памяти ЭВМ имеет длину 8 бит (байт). Каждый байт имеет свой номер (его называют адресом). Наибольшую последовательность бит, которую ЭВМ может обрабатывать как единое целое, называют машинным словом. Длина машинного слова зависит от разрядности процессора и может быть равной 16, 32 битам и т.д. Для кодирования символов достаточно одного байта. При этом можно представить 256 символов (с десятичными кодами от 0 до 255). Набор символов персональных ЭВМ IBM PC чаще всего является расширением кода ASCII (American Standart Code for Information Interchange - стандартный американский код для обмена информацией). В некоторых случаях при представлении в памяти ЭВМ чисел используется смешанная двоично-десятичная «система счисления», где для хранения каждого десятичного знака нужен полубайт (4 бита) и десятичные цифры от 0 до 9 представляются соответствующими двоичными числами от 0000 до 1001. Например, упакованный десятичный формат, предназначенный для хранения целых чисел с 18 значащими цифрами и занимающий в памяти 10 байт (старший из которых знаковый), использует именно этот вариант. Другой способ представления целых чисел - дополнительный код. Диапазон значений величин зависит от количества бит памяти, отведенных для их хранения. Например, величины типа Integer (все названия типов данных здесь и ниже представлены в том виде, в каком они приняты в языке программирования Turbo Pascal, в других языках такие типы данных тоже есть, но могут иметь другие названия) лежат в диапазоне от -32768 (-2 15) до 32767 (2 15 - 1), и для их хранения отводится 2 байта; типа Longlnt - в диапазоне от -2 31 до 2 31 - 1 и размещаются в 4 байтах; типа Word - в диапазоне от 0 до 65535 (2 16 - 1) (используется 2 байта) и т.д. Как видно из примеров, данные могут быть интерпретированы как числа со знаками, так и без знаков. В случае представления величины со знаком самый левый (старший) разряд указывает на положительное число, если содержит нуль, и на отрицательное, если - единицу. Вообще разряды нумеруются справа налево, начиная с 0. Ниже показана нумерация бит в двухбайтовом машинном слове. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Дополнительный код положительного числа совпадает с его прямым кодом. Прямой код целого числа может быть получен следующим образом: число переводится в двоичную систему счисления, а затем его двоичную запись слева дополняют таким количеством незначащих нулей, сколько требует тип данных, к которому принадлежит число. Например, если число 37 (10) = 100101 (2) объявлено величиной типа Integer, то его прямым кодом будет 0000000000100101, а если величиной типа Longlnt, то его прямой код будет. Для более компактной записи чаще используют шестнадцатеричный код. Полученные коды можно переписать соответственно как 0025 (16) и 00000025 (16) . Дополнительный код целого отрицательного числа может быть получен по следующему алгоритму: 1) записать прямой код модуля числа; 2) инвертировать его (заменить единицы нулями, нули - единицами); 3) прибавить к инверсному коду единицу. Например, запишем дополнительный код числа (-37), интерпретируя его как величину типа Longlnt: 1) прямой код числа 37 есть; 2) инверсный код; 3) дополнительный код или FFFFFFDB (16) . При получении числа по его дополнительному коду прежде всего необходимо определить его знак. Если число окажется положительным, то просто перевести его код в десятичную систему счисления. В случае отрицательного числа необходимо выполнить следующий алгоритм: 1) вычесть из кода числа 1; 2) инвертировать код; 3) перевести в десятичную систему счисления. Полученное число записать со знаком минус. Примеры. Запишем числа, соответствующие дополнительным кодам: а) 0000000000010111. Поскольку в старшем разряде записан нуль, то результат будет положительным. Это код числа 23; б) 1111111111000000. Здесь записан код отрицательного числа. Исполняем алгоритм: 1) 1111I11111000000 (2) - 1 (2)= 1111111110111111 (2) ; 2) 0000000001000000; 3) 1000000 (2) = 64 (10) . Ответ: -64. Несколько иной способ применяется для представления в памяти персонального компьютера действительных чисел. Рассмотрим представление величин с плавающей точкой. Любое действительное число можно записать в стандартном виде М10 р, где 1

Персональный компьютер IBM PC позволяет работать со следующими действительными типами (диапазон значений указан по абсолютной величине): Покажем преобразование действительного числа для представления его в памяти ЭВМ на примере величины типа Double. Как видно из таблицы, величина это типа занимает в памяти 8 байт. На рисунке показано, как здесь представлены поля мантиссы и порядка: Можно заметить, что старший бит, отведенный под мантиссу, имеет номер 51, т.е. мантисса занимает младшие 52 бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна 1, здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка для упрощения вычислений и сравнения действительных чисел хранится в виде смещенного числа, т.е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению поряд- ка соответствовал нуль. Например, для типа Double порядок занимает 11 бит и имеет диапазон от 2~ 1023 до 2 1023 , поэтому смещение равно Ю23 (10) = 1111111111 (2) . Наконец, бит с номером 63 указывает на знак числа. Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ: 1) перевести модуль данного числа в двоичную систему счисления; 2) нормализовать двоичное число, т.е. записать в виде М-2 Р, где М- мантисса (ее целая часть равна 1 (2)) и р - порядок, записанный в десятичной системе счисления; 3) прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления; 4) учитывая знак заданного числа (0 - положительное; 1 - отрицательное), выписать его представление в памяти ЭВМ. Пример. Запишем код числа -312,3125. 1) Двоичная запись модуля этого числа имеет вид 100111000,0101. 2) Имеем 100111000,0101 = 1,001110000101 2 8 . 3) Получаем смещенный порядок 8 + 1023 = 1031. Далее имеем Ю31 (10) = = 10000000111 (2) . . 4) Окончательно

1) Прежде всего замечаем, что это код положительного числа, поскольку в разряде с номером 63 записан нуль. Получим порядок этого числа: 01111111110 (2) = 1022 (10) ; 1022 - 1023 = -1. 2) Число имеет вид 1,1100011-2“ 1 или 0,11100011. 3) Переводом в десятичную систему счисления получаем 0,88671875.

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

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

Для кодирования символов достаточно одного байта. При этом можно представить 256 символов (с десятичными кодами от 0 до 255). Набор символов персональных компьютеров чаще всего является расширением кода ASCII (American Standart Code of Information Interchange - стандартный американский код для обмена информацией).

В некоторых случаях при представлении в памяти ЭВМ чисел используется смешанная двоично-десятичная система счисления, где для хранения каждого десятичного знак нужен полубайт (4 бита) и десятичные цифры от 0 до 9 представляются соответствующими двоичными числами от 0000 до 1001. Например, упакованный десятичный формат, предназначенный для хранения целых чисел с 18-ю значащими цифрами и занимающий в памяти 10 байт (старший из которых знаковый), использует именно этот вариант.

Другой способ представления целых чисел - дополнительный код . Диапазон значений величин зависит от количества бит памяти отведенных для их хранения. Например, величины типа Integer лежат в диапазоне от
-32768 (-2 15) до 32677 (2 15 -1) и для их хранения отводится 2 байта: типа LongInt - в диапазоне от -2 31 до 2 31 -1 и размещаются в 4 байтах: типа Word - в диапазоне от 0 до 65535 (2 16 -1) используется 2 байта и т.д.

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

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

Дополнительный код положительного числа совпадает с его прямым кодом . Прямой код целого числа может быть представлен следующим образом: число переводиться в двоичную систему счисления, а затем его двоичную запись слева дополняют таким количеством незначащих нулей, сколько требует тип данных, к которому принадлежит число. Например, если число 37 (10) = 100101 (2) объявлено величиной типа Integer, то его прямым кодом будет 0000000000100101, а если величиной типа LongInt, то его прямой код будет. Для более компактной записи чаще используют шестнадцатеричный код. Полученные коды можно переписать соответственно как 0025 (16) и 00000025 (16) .

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

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

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

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

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

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

2. инверсный код

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

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

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

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

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

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

a. 0000000000010111.

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

b. 1111111111000000.

Здесь записан код отрицательного числа, исполняем алгоритм:

1. 1111111111000000 (2) - 1 (2) = 1111111110111111 (2) ;

2. 0000000001000000;

3. 1000000 (2) = 64 (10)

Несколько иной способ применяется для представления в памяти персонального компьютера действительных чисел. Рассмотрим представление величин сплавающей точкой .

Любое действительное число можно записать в стандартном виде M*10 p , где 1 ≤ M < 10, р- целое число. Например, 120100000 = 1,201*10 8 . Поскольку каждая позиция десятичного числа отличается от соседней на степень числа 10, умножение на 10 эквивалентно сдвигу десятичной запятой на 1 позицию вправо. Аналогично деление на 10 сдвигает десятичную запятую на позицию влево. Поэтому приведенный выше пример можно продолжить: 120100000 = 1,201*10 8 = 0,1201*10 9 = 12,01*10 7 ... Десятичная запятая плавает в числе и больше не помечает абсолютное место между целой и дробной частями.

В приведённой выше записи М называют мантиссой числа, а р - его порядком . Для того чтобы сохранить максимальную точность, вычислительные машины почти всегда хранят мантиссу в нормализованном виде, что означает, что мантисса в данном случае есть число, лежащее между 1 (10) и 2 (10) (1 ≤ М < 2). Основные системы счисления здесь, как уже отмечалось выше,- 2. Способ хранения мантиссы с плавающей точкой подразумевает, что двоичная запятая находится на фиксированном месте. Фактически подразумевается, что двоичная запятая следует после первой двоичной цифры, т.е. нормализация мантиссы делает единичным первый бит, помещая тем самым значение между единицей и двойкой. Место, отводимое для числа с плавающей точкой, делится на два поля. Одно поле содержит знак и значение мантиссы, а другое содержит знак и значение порядка.



Персональный компьютер IBM PC с математическим сопроцессором 8087 позволяет работать со следующими действительными типами (диапазон значений указан по абсолютной величине):

Можно заметить, что старший бит, отведенный под мантиссу, имеет номер 51, т.е. мантисса занимает младшие 52 бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна единице, здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка храниться здесь не как целое число, представленное в дополнительном коде. Для упрощения вычислений и сравнения действительных чисел значение порядка в ЭВМ хранится в виде смещенного числа , т.е. к настоящему значению порядка, перед записью его в память, прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает 11 бит и имеет диапазон от 2 -1023 до 2 1023 , поэтому смещение равно 1023 (10) = 1111111111 (2) . Наконец, бит с номером 63 указывает на знак числа.

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

1. перевести модуль данного числа в двоичную систему счисления;

2. нормализовать двоичное число, т.е. записать в виде М*2 p , где М - мантисса (ее целая часть равна 1 (2)) и р - порядок, записанный в десятичной системе счисления;

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

4. учитывая знак заданного числа (0 - положительное; 1 - отрицательное), выписать его представление в памяти ЭВМ.

Пример. Запишем код числа -312,3125.

1. Двоичная запись модуля этого числа имеет вид 100111000,0101.

2. Имеем 100111000,0101 = 1,001110000101*2 8 .

3. Получаем смещенный порядок 8 + 1023 = 1031. Далее имеем 1031 (10) = 10000000111 (2) .



Статьи по теме