ЛБ-4
.docxФГБОУ ВО
Уфимский Государственный Авиационный Технический Университет
Кафедра Автоматизированных систем управления
Лабораторная работа №4
«Представление чисел в памяти ЭВМ и работа с типами данных»
Вариант 2
Выполнили: Студенты ИВТ-114 Ислангулов Д.А.
Билалов Р.И.
Балыбердин Н.А.
Проверил: Казанцев А.В.
Уфа 2017
1. Цель работы
Целью работы является изучение стандарта двоичной арифметики с плавающей точкой, а также работа с типами данных и выполнение побитовых операций на языке Си с использование компилятора MinGW.
2. Ход работы:
Изучили теоретическую часть.
2. Представить число в 32 битном формате по стандарту IEEE 754.
Таблица 1
Число в формате IEEE 7547
-
Знак
(1бит)
Смещенная экспонента
(8 бит)
Остаток от мантиссы
(23 бита)
1
10000110
10010011010011010100111
Выполнить проверку правильности полученного числа в 32 битном формате, преобразовав число, полученное в пункте 2, из 32 битного формата IEEE754 в десятичное число.
Получается F = (-1)1*2(134-127) *(1+4826791/223) = 128*1.57539832 = -201.65098496
F=-201.65098496, что не равно начальному -201,651 т.к. была потеря точности.
Реализовать программу на языке Си для выполнения арифметической операции C=A+B, где числа A=6500010, B=123510 и С=010 берутся с форматом unsigned short int.
Произвели решение программы через командную через командную строку:
Рис. 1 - Командная строка
Код программы:
Рис. 2 - Код программы
Полученный результат:
Рис. 3 – Вывод результата
Обоснование: в программе произошло переполнение С (диапазон от 0 до 65535) из-за чего счёт начался с 0 и в итоге получилось С=699.
Произвести побайтовое копирование переменной Y с типом данных int, в переменную D с типом данных float. Просмотреть значение переменной D после копирования. Обосновать полученный результат.
Произвели решение программы через командную через командную строку:
Рис.4 - Командная строка
Код программы:
Рис. 5 - Код программы
Полученный результат:
Рис. 6 – Вывод результата
Обоснование: Из-за различных типов данных, при побайтовом копировании, число изменилось
3. Вывод:
В ходе данной лабораторной работы были изучены стандартs двоичной арифметики с плавающей точкой, а также была проведена работа с типами данных и выполнение побитовых операций на языке Си с использование компилятора MinGW.
4.Ответы на Контрольные вопросы:
Что описывает стандарт IEEE 754?
Стандарт IEEE 754 описывает:
– как представлять нормализованные положительные и отрицательные числа с плавающей точкой;
– как представлять денормализованные положительные и отрицательные числа с плавающей точкой;
– как представлять нулевые числа;
– как представлять специальную величину бесконечность (Infinity);
– как представлять специальную величину «Не число» (NaN или NaNs);
– режимы округления;
– исключительные ситуации: деление на нуль, переполнение, потеря значимости;
– операции арифметические и другие.
Что такое нормализованное и денормализованное представление числа в форме с плавающей точкой? Привести пример.
Согласно стандарту IEEE 754, если мантисса находится в диапазоне , то число считается нормализованным.
Пример:
Согласно стандарту IEEE 754, если мантисса находится в диапазоне , то число считается денормализованным.
Как представляются нуль и бесконечность в стандарте IEEE 754?
Число 00 00 00 0016 считается числом +0.
-
Знак (1бит)
Смещенная экспонента
(8 бит)
Остаток от мантиссы
(23 бита)
0
0000 0000
0000 0000 0000 0000 0000 000
Число 80 00 00 0016 считается числом -0.
-
Знак (1бит)
Смещенная экспонента
(8 бит)
Остаток от мантиссы
(23 бита)
1
0000 0000
0000 0000 0000 0000 0000 000
Число 7F 80 00 0016 считается числом .
-
Знак (1бит)
Смещенная экспонента
(8 бит)
Остаток от мантиссы
(23 бита)
0
1111 1111
0000 0000 0000 0000 0000 000
Число FF 80 00 0016 считается числом .
-
Знак (1бит)
Смещенная экспонента
(8 бит)
Остаток от мантиссы
(23 бита)
1
1111 1111
0000 0000 0000 0000 0000 000
Какие существуют типы данных в языке Си?
В языке Си можно выделить следующие наиболее используемые типы данных:
char – символьный;
int – целый;
float – вещественный;
double – вещественный двойной точности.
В языке Си существуют типы данных с модификаторами (unsigned – без знака, signed – со знаком, short – короткий, long – длинный)
Как можно скопировать все биты одной переменной в другую в языке Си? Привести пример.
Для побайтового копирования в Си используется функция memcpy (&d, &s, n), где &d – указатель на приемник, &s – указатель на источник, n – число байт для копирования.
Пример.
Рассмотрим переменную X=5168110 имеющий тип unsigned int. При этом для записи числа используется 4 байта, причем все 4 байта отданы под число без знака. В двоичной форме оно будет представлено как: 00000000 00000000 11001001 111000012
В случае если побайтово скопировать переменную X в переменную Y, имеющей тип float (4 байта, где старший бит отдан под знак, следующие 8 бит отданы под машинный порядок и 23 бита под мантиссу), получим что знак числа будет плюс, а порядок числа -127, т.е. число будет близко к нулю, и машина воспримет его как ноль.
В случае если X=107379350510, где в двоичной форме оно выглядит как 01000000 00000000 11001001 111000012, побайтно записать в переменную Y с типом float, то десятичное значение Y=2,01232210.
Различие в значениях X и Y происходят из-за разности в форматах unsigned int и float, где unsigned int – это представление целых беззнаковых чисел (все биты отданы под число), а float - представление вещественных чисел (1 бит знак, 8 бит смещение экспоненты и 23 бита остаток от мантиссы).