ЛАБОРАТОРНАЯ РАБОТА ПРЕДСТАВЛЕНИЕ ДАННЫХ В ЭВМ 1. ЦЕЛЬ РАБОТЫ Целью работы является изучение способов представления целочисленных величин в программах, написанных на языке С++ и преобразование формы их представления и кодов при выполнении операторов ввода, присваивания между целочисленными переменными различных форматов, суммирования и вывода. 2. ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ 2.1.Представление числовой информации в ЭВМ В своей повседневной жизни мы для записи числовых значений целого типа используем позиционную систему счисления с основанием 10, причем используем прямые коды. Запись числа – это строка текста, состоящая из последовательности цифр, перед которой может стоять знак. В математике мы оперируем с целыми числами, множество значений которых бесконечно. В компьютере для представления целых чисел используются двоичные коды, длина которых n фиксирована и определяется форматом числа. Количество целых чисел, которые можно представить в ЭВМ конечно и равно 2n. Для представления целых чисел используется позиционная система счисления с основанием 2. Используются числа без знака, принимающие только положительные значения в диапазоне от 0 до 2n-1 и числа со знаком. Для представления чисел со знаком используются дополнительные коды. 2.2.Изменение представления чисел при обработке в ЭВМ Рассмотрим простейший цикл обработки чисел в ЭВМ, когда число вводится с клавиатуры, сохраняется в памяти и затем выводится на дисплей. Вводимое число представляет строку символов, представляющих значение числа в десятичной позиционной системе счисления, записанное в прямом коде. После нажатия клавиши Enter процессор обрабатывает эту строку в соответствии с типом переменной, выделенной для его хранения, и пересылает полученный двоичный код в память. Для целых чисел со знаком это будет дополнительный код числа, представленного в двоичной позиционной системе счисления. При этом происходит отображение входного десятичного числа (множество таких чисел бесконечно) в множество чисел, представимых для указанного формата представления чисел в ЭВМ. При выводе числа двоичный код числового значения из оперативной памяти пересылается в процессор, где, в соответствие с форматом числа, производится преобразование этого кода в последовательность символов, представляющих число в десятичной позиционной системе счисления записанное в прямом коде. 2.3.Форматы представления целых чисел в языке С++ . В программе на языке программирования высокого уровня имеется раздел, где описываются используемые в программе переменные. Каждая переменная имеет имя, тип и значение. Имя переменной в железе соотносится с адресом ячейки памяти, с которого начинается размещение данных. Тип определяет размер выделяемой памяти и способ представления данных. Для переменных целого типа используется дополнительный код при представлении чисел со знаком. Значение - это код который хранится в выделенной области памяти. Очень важно знать, что если для переменной выделяется несколько байт памяти, то они хранятся в памяти начиная с младшего байта. В языке программирования С++ можно задать целые числа различных типов. тип Диапазон значений Тип значений Формат signed long int -2147483648…2147483647 Целое со знаком 4 байта unsigned long int 0…4294967295 Целое без знака 4 байта signed char -128 … 127 Целое со знаком 1 байт unsigned char 0 … 255 Целое без знака 1 байт signed short int -32768 … 32767 Целое со знаком 2 байт unsigned short int 0 … 65535 Целое без знака 2байт Например описана переменная типа целое со знаком формата 4 байта. Если вводится значение 129, то дополнительный двоичный код, который нужно сохранить в памяти имеет значение 00000000 00000000 00000000 10000001 и он будет сохранен в четырех последовательных ячейках памяти, которые будут хранить следующие коды 10000001 00000000 00000000 00000000 2.4.Выполнение оператора присваивания в языке С++ Синтаксис оператора присваивания <переменная> =<выражение> Выполнение оператора присваивания происходит за три шага. Шаг 1. Вычисляется значение выражения. Шаг 2. Тип полученного выражения преобразуется к типу переменной, стоящей в левой части. Шаг 3. Значение сохраняется в выделенной для переменной области памяти. Когда выполняется оператор присваивания а1 = а4 где а1 переменная целого типа со знаком формата 1 байт, а а4 переменная целого типа со знаком формата 4 байта передается один (первый) байт из памяти в которой хранится переменная а4. Если значение переменной а4 равно 129, то по адресу переменной а1 будет храниться код 10000001 Когда мы будем выводить значение переменной а1, то поскольку в старшем разряде хранящегося кода записана 1, система программирования интерпретирует его как отрицательное число, записанное в дополнительном коде, переводит его в прямой код и мы увидим на экране значение -127 (отрицательное значение). 3.ЗАДАНИЕ В программе определены переменные Имя Тип значений переменной tempA Целое со знаком tempB Целое со знаком a1 Целое без знака b1 Целое без знака c1 Целое без знака a2 Целое со знаком b2 Целое со знаком c2 Целое со знаком a3 Целое со знаком b3 Целое со знаком c3 Целое со знаком Формат 4 байта 4 байта 1 байт 1 байт 1 байт 1 байт 1 байт 1 байт 2 байта 2 байта 2 байта Выполняется программа, в которой реализован следующий алгоритм Ввод tempA и tempB //сегмент 1 a1 = tempA; b1 = tempB; c1 = a1 +b1; вывод a1, b1, c1; //сегмент 2 a2 = tempA; b2 = tempB; c2 = a2 +b2; вывод a2, b2, c2; //сегмент 3 a3 = tempA; b3 = tempB; c3 = a3 +b3; вывод a3, b3, c3; Вам необходимо для каждого из трех наборов целых чисел вашего варианта заполнить таблицу, отображающую коды переменных и выводимые значения со следующей структурой tempA= Имя переменной a1 b1 c1 Имя переменной a2 b2 c2 Имя переменной a3 b3 c3 tempB= Сегмент 1 Двоичный код Сегмент 2 Двоичный код Сегмент 3 Двоичный код Выводимое значение Выводимое значение Выводимое значение Пример оформления отчета для одного набора данных А) 77710 = 00000000 00000000 00000011 000010012 В) 3778610 = 00000000 00000000 10010011 100110102 tempA=00000000 00000000 00000011 00001001 Имя переменной tempB=00000000 00000000 10010011 10011010 Сегмент 1 Двоичный код Выводимое значение a1 b1 c1 Имя переменной a2 b2 c2 Имя переменной a3 b3 c3 00001001 10011010 10100011 Сегмент 2 Двоичный код 00001001 10011010 10100011 Сегмент 3 Двоичный код 00000011 00001001 10010011 10011010 10010110 10100011 9 154 163 Выводимое значение 9 -102 -93 Выводимое значение 777 -27750 -26973 При выполнении работы необходимо заготовить для каждого из трех наборов целых чисел вашего варианта заполнить таблицу, отображающую коды переменных и ожидаемые выводимые значения и направить их на проверку преподавателю. На следующем занятии происходит проверка правильности предсказаний и анализ допущенных ошибок. 4. СОДЕРЖАНИЕ ОТЧЕТА О РАБОТЕ Отчет должен содержать: титульный лист; цель работы; таблица с кодами заданных пар целых чисел в формате целое со знаком 4 байта. Таблицы выполнения программы для каждой пары чисел по указанной выше форме. Выводы по работе.