Файл: Отчет по лабораторной работе 1 на тему Исследование внутреннего представления различных форматов данных.docx
Добавлен: 29.03.2024
Просмотров: 47
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Минобрнауки России
Федеральное государственное автономное образовательное
учреждение высшего образования
«Санкт-Петербургский государственный электротехнический университет им. В.И. Ульянова (Ленина)»
(СПбГЭТУ «ЛЭТИ»)
Факультет компьютерных технологий и информатики
Кафедра вычислительной техники
ОТЧЕТ
по лабораторной работе №1
на тему:
«Исследование внутреннего представления различных форматов данных»
по дисциплине: «Организация ЭВМ и систем»
Выполнил студент группы №
Принял: Гречухин М.Н.
Санкт-Петербург
2018 г.
Содержание
Введение…………………………………………………...…..………………….3
-
Задание ……………………………………………………………………….3
-
Текст программы……………………………………………………………..6
-
Примеры запуска программы……………………………… ………………10
-
Структурная схема аппаратных средств, используемых при выполнении программы……………………………………………………………………11
Заключение………………………………………………………………………11
Введение
Цель работы: знакомство с внутренним представлением различных типов
данных, используемых компьютером при их обработке.
1. Задание
1. Написать программу, которая выводит на экран двоичное представление в памяти ЭВМ (все разряды) целого числа, как положительного, так и отрицательного. При выводе визуально обозначить знаковый разряд и значащие разряды (отступом, цветом и т. п.).
2. Написать программу, которая выводит на экран двоичное представление в памяти ЭВМ (все разряды) числа типа float и double. При выводе визуально обозначить знаковый разряд мантиссы, знаковый разряд порядка (если есть), мантиссу и порядок.
3. Написать программу, позволяющую изменить произвольные биты в целом числе и числе типа float на 1 или 0 по указанию пользователя (номер бита и значение вводятся с клавиатуры).
2. Текст программы
#include "stdafx.h"
#include
using namespace std;
union bitDouble { double number; unsigned long int bit[2]; };
union bitFloat { float number; unsigned long int bit; };
void outFloat(unsigned long int num) //вывод двоичного представления вещественного числа типа Float
{
for (int i = sizeof(unsigned long int) * 8 - 1; i >= 0; --i)
{
cout << ((num >> i) & 1);
if ((i == sizeof(unsigned long int) * 8 - 1) || (i == sizeof(unsigned long int) * 8 - 9))
cout << ' ';
}
cout << endl;
}
void outDouble(unsigned long int* num) //Вывод двоичного представления вещественного числа типа Double
{
for (int i = 1; i >= 0; i--)
{
for (int j = sizeof(unsigned long int) * 8 - 1; j >= 0; j--) {
cout << ((num[i] >> j) & 1);
if ((i == 1) && ((j == sizeof(unsigned long int) * 8 - 1) || (j == sizeof(unsigned long int) * 8 - 12)))
cout << ' ';
}
}
cout << endl;
}
void outInt(int num) //Вывод двоичного представления целого числа типа int
{
for (int i = sizeof(int) * 8 - 1; i >= 0; --i)
{
cout << ((num >> i) & 1);
if (i == sizeof(int) * 8 - 1)
cout << ' ';
}
cout << endl;
}
int main()
{
int NUM;
int menu;
bitFloat FNUM;
bitDouble DNUM;
do
{
cout << " MAIN MENU " << endl;
cout << " 1. Output bit" << endl;
cout << " 2. Change bit" << endl;
cout << " 0. Exit " << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
cout << " Enter the integer number " << endl;
cin >> NUM;
outInt(NUM);
cout << "Enter the double number " << endl;
cin >> DNUM.number;
outDouble(DNUM.bit);
cout << "Enter the float number " << endl;
cin >> FNUM.number;
outFloat(FNUM.bit);
break;
case 2:
bool type;
bool switcher;
int numbit;
cout << "Choose data: 1. integer / 0. float" << endl;
cin >> type;
if (type == 1)
{
cout << " Enter an integer" << endl;
cin >> NUM;
int NewNum = NUM;
do
{
cout << "Enter a number of bit" << endl;
cin >> numbit;
if (numbit < 0 || numbit > sizeof(int) * 8 - 1)
cout << "Error! Enter a correct number of bit" << endl;
} while (numbit < 0 || numbit > sizeof(int) * 8 - 1);
cout << "Change this bit to 0 or 1?" << endl;
cin >> switcher;
if (switcher == 1)
{
NewNum |= 1 << numbit;
cout << "Result:" << endl;
outInt(NUM);
outInt(NewNum);
}
else if (switcher == 0)
{
NewNum &=
(1 << numbit);
cout << "Result:" << endl;
outInt(NUM);
outInt(NewNum);
}
}
else if (type == 0)
{
cout << " Enter a float" << endl;
cin >> FNUM.number;
bitFloat Newfnum = FNUM;
do {
cout << "Enter a number of bit" << endl;
cin >> numbit;
if (numbit < 0 || numbit > sizeof(float) * 8 - 1)
cout << "Error! Enter a correct number of bit (0-31)" << endl;
} while (numbit < 0 || numbit > sizeof(float) * 8 - 1);
cout << "Change this bit to 0 or 1?" << endl;
cin >> switcher;
if (switcher == 1)
{
Newfnum.bit |= 1 << numbit;
cout << "Result:" << endl;
outFloat(FNUM.bit);
outFloat(Newfnum.bit);
}
else if (switcher == 0)
{
Newfnum.bit &=
(1 << numbit);
Минобрнауки России
Федеральное государственное автономное образовательное
учреждение высшего образования
«Санкт-Петербургский государственный электротехнический университет им. В.И. Ульянова (Ленина)»
(СПбГЭТУ «ЛЭТИ»)
Факультет компьютерных технологий и информатики
Кафедра вычислительной техники
ОТЧЕТ
по лабораторной работе №1
на тему:
«Исследование внутреннего представления различных форматов данных»
по дисциплине: «Организация ЭВМ и систем»
Выполнил студент группы №
Принял: Гречухин М.Н.
Санкт-Петербург
2018 г.
Содержание
Введение…………………………………………………...…..………………….3
-
Задание ……………………………………………………………………….3 -
Текст программы……………………………………………………………..6 -
Примеры запуска программы……………………………… ………………10 -
Структурная схема аппаратных средств, используемых при выполнении программы……………………………………………………………………11
Заключение………………………………………………………………………11
Введение
Цель работы: знакомство с внутренним представлением различных типов
данных, используемых компьютером при их обработке.
1. Задание
1. Написать программу, которая выводит на экран двоичное представление в памяти ЭВМ (все разряды) целого числа, как положительного, так и отрицательного. При выводе визуально обозначить знаковый разряд и значащие разряды (отступом, цветом и т. п.).
2. Написать программу, которая выводит на экран двоичное представление в памяти ЭВМ (все разряды) числа типа float и double. При выводе визуально обозначить знаковый разряд мантиссы, знаковый разряд порядка (если есть), мантиссу и порядок.
3. Написать программу, позволяющую изменить произвольные биты в целом числе и числе типа float на 1 или 0 по указанию пользователя (номер бита и значение вводятся с клавиатуры).
2. Текст программы
#include "stdafx.h"
#include
using namespace std;
union bitDouble { double number; unsigned long int bit[2]; };
union bitFloat { float number; unsigned long int bit; };
void outFloat(unsigned long int num) //вывод двоичного представления вещественного числа типа Float
{
for (int i = sizeof(unsigned long int) * 8 - 1; i >= 0; --i)
{
cout << ((num >> i) & 1);
if ((i == sizeof(unsigned long int) * 8 - 1) || (i == sizeof(unsigned long int) * 8 - 9))
cout << ' ';
}
cout << endl;
}
void outDouble(unsigned long int* num) //Вывод двоичного представления вещественного числа типа Double
{
for (int i = 1; i >= 0; i--)
{
for (int j = sizeof(unsigned long int) * 8 - 1; j >= 0; j--) {
cout << ((num[i] >> j) & 1);
if ((i == 1) && ((j == sizeof(unsigned long int) * 8 - 1) || (j == sizeof(unsigned long int) * 8 - 12)))
cout << ' ';
}
}
cout << endl;
}
void outInt(int num) //Вывод двоичного представления целого числа типа int
{
for (int i = sizeof(int) * 8 - 1; i >= 0; --i)
{
cout << ((num >> i) & 1);
if (i == sizeof(int) * 8 - 1)
cout << ' ';
}
cout << endl;
}
int main()
{
int NUM;
int menu;
bitFloat FNUM;
bitDouble DNUM;
do
{
cout << " MAIN MENU " << endl;
cout << " 1. Output bit" << endl;
cout << " 2. Change bit" << endl;
cout << " 0. Exit " << endl;
cin >> menu;
system("cls");
switch (menu)
{
case 1:
cout << " Enter the integer number " << endl;
cin >> NUM;
outInt(NUM);
cout << "Enter the double number " << endl;
cin >> DNUM.number;
outDouble(DNUM.bit);
cout << "Enter the float number " << endl;
cin >> FNUM.number;
outFloat(FNUM.bit);
break;
case 2:
bool type;
bool switcher;
int numbit;
cout << "Choose data: 1. integer / 0. float" << endl;
cin >> type;
if (type == 1)
{
cout << " Enter an integer" << endl;
cin >> NUM;
int NewNum = NUM;
do
{
cout << "Enter a number of bit" << endl;
cin >> numbit;
if (numbit < 0 || numbit > sizeof(int) * 8 - 1)
cout << "Error! Enter a correct number of bit" << endl;
} while (numbit < 0 || numbit > sizeof(int) * 8 - 1);
cout << "Change this bit to 0 or 1?" << endl;
cin >> switcher;
if (switcher == 1)
{
NewNum |= 1 << numbit;
cout << "Result:" << endl;
outInt(NUM);
outInt(NewNum);
}
else if (switcher == 0)
{
NewNum &=
cout << "Result:" << endl;
outFloat(FNUM.bit);
outFloat(Newfnum.bit);
}
}
break;
case 0:
break;
}
}
while (menu != 0);
system("pause");
return 0;
};
3 . Примеры запуска программы
4. Структурная схема аппаратных средств, используемых при выполнении программы
Заключение
При выполнении лабораторной работы получены знания внутреннего представления типов int, float и double, используемые компьютером при их обработке.