Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛБ-4

.docx
Скачиваний:
10
Добавлен:
07.01.2022
Размер:
240.08 Кб
Скачать

ФГБОУ ВО

Уфимский Государственный Авиационный Технический Университет

Кафедра Автоматизированных систем управления

Лабораторная работа №4

«Представление чисел в памяти ЭВМ и работа с типами данных»

Вариант 2

Выполнили: Студенты ИВТ-114 Ислангулов Д.А.

Билалов Р.И.

Балыбердин Н.А.

Проверил: Казанцев А.В.

Уфа 2017

1. Цель работы

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

2. Ход работы:

  1. Изучили теоретическую часть.

  2. 2. Представить число в 32 битном формате по стандарту IEEE 754.

Таблица 1

Число в формате IEEE 7547

Знак

(1бит)

Смещенная экспонента

(8 бит)

Остаток от мантиссы

(23 бита)

1

10000110

10010011010011010100111

  1. Выполнить проверку правильности полученного числа в 32 битном формате, преобразовав число, полученное в пункте 2, из 32 битного формата IEEE754 в десятичное число.

Получается F = (-1)1*2(134-127) *(1+4826791/223) = 128*1.57539832 = -201.65098496

F=-201.65098496, что не равно начальному -201,651 т.к. была потеря точности.

  1. Реализовать программу на языке Си для выполнения арифметической операции C=A+B, где числа A=6500010, B=123510 и С=010 берутся с форматом unsigned short int.

Произвели решение программы через командную через командную строку:

Рис. 1 - Командная строка

Код программы:

Рис. 2 - Код программы

Полученный результат:

Рис. 3 – Вывод результата

Обоснование: в программе произошло переполнение С (диапазон от 0 до 65535) из-за чего счёт начался с 0 и в итоге получилось С=699.

  1. Произвести побайтовое копирование переменной Y с типом данных int, в переменную D с типом данных float. Просмотреть значение переменной D после копирования. Обосновать полученный результат.

Произвели решение программы через командную через командную строку:

Рис.4 - Командная строка

Код программы:

Рис. 5 - Код программы

Полученный результат:

Рис. 6 – Вывод результата

Обоснование: Из-за различных типов данных, при побайтовом копировании, число изменилось

3. Вывод:

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

4.Ответы на Контрольные вопросы:

  1. Что описывает стандарт IEEE 754?

Стандарт IEEE 754 описывает:

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

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

– как представлять нулевые числа;

– как представлять специальную величину бесконечность (Infinity);

– как представлять специальную величину «Не число» (NaN или NaNs);

– режимы округления;

– исключительные ситуации: деление на нуль, переполнение, потеря значимости;

– операции арифметические и другие.

  1. Что такое нормализованное и денормализованное представление числа в форме с плавающей точкой? Привести пример.

Согласно стандарту IEEE 754, если мантисса находится в диапазоне , то число считается нормализованным.

Пример:

Согласно стандарту IEEE 754, если мантисса находится в диапазоне , то число считается денормализованным.

  1. Как представляются нуль и бесконечность в стандарте 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

  1. Какие существуют типы данных в языке Си?

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

char – символьный;

int – целый;

float – вещественный;

double – вещественный двойной точности.

В языке Си существуют типы данных с модификаторами (unsigned – без знака, signed – со знаком, short – короткий, long – длинный)

  1. Как можно скопировать все биты одной переменной в другую в языке Си? Привести пример.

Для побайтового копирования в Си используется функция 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 бита остаток от мантиссы).

Соседние файлы в предмете Аппаратные средства вычислительной техники