Вы находитесь на странице: 1из 7

Минобрнауки России

Федеральное государственное автономное образовательное


учреждение высшего образования
«Санкт-Петербургский государственный электротехнический университет им.
В.И. Ульянова (Ленина)»
(СПбГЭТУ «ЛЭТИ»)
Факультет компьютерных технологий и информатики

Кафедра вычислительной техники

ОТЧЕТ
по лабораторной работе №1
на тему:
«Исследование внутреннего представления различных
форматов данных»
по дисциплине: «Организация ЭВМ и систем»

Выполнил студент группы №

Принял: Гречухин М.Н.

Санкт-Петербург
2018 г.
Содержание
Введение…………………………………………………...…..………………….3
1. Задание ……………………………………………………………………….3
2. Текст программы……………………………………………………………..6
3. Примеры запуска программы……………………………… ………………10
4. Структурная схема аппаратных средств, используемых при выполнении
программы……………………………………………………………………11
Заключение………………………………………………………………………11

2
Введение

Цель работы: знакомство с внутренним представлением различных типов


данных, используемых компьютером при их обработке.

1. Задание

1. Написать программу, которая выводит на экран двоичное представление в


памяти ЭВМ (все разряды) целого числа, как положительного, так и
отрицательного. При выводе визуально обозначить знаковый разряд и значащие
разряды (отступом, цветом и т. п.).
2. Написать программу, которая выводит на экран двоичное представление в
памяти ЭВМ (все разряды) числа типа float и double. При выводе визуально
обозначить знаковый разряд мантиссы, знаковый разряд порядка (если есть),
мантиссу и порядок.
3. Написать программу, позволяющую изменить произвольные биты в целом числе
и числе типа float на 1 или 0 по указанию пользователя (номер бита и значение
вводятся с клавиатуры).

3
2. Текст программы
#include "stdafx.h"
#include <iostream>

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;

4
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;

5
if (switcher == 1)
{
Newfnum.bit |= 1 << numbit;
cout << "Result:" << endl;
outFloat(FNUM.bit);
outFloat(Newfnum.bit);
}
else if (switcher == 0)
{
Newfnum.bit &= ~(1 << numbit);
cout << "Result:" << endl;
outFloat(FNUM.bit);
outFloat(Newfnum.bit);
}
}
break;
case 0:
break;
}
}
while (menu != 0);

system("pause");
return 0;
};

3. Примеры запуска программы

4. Структурная схема аппаратных средств,


используемых при выполнении программы

Заключение

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

Вам также может понравиться