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

ОргЭВМиС (3 сем) / Лаба №1 / Отчёт по Лабораторной Работе №1

.docx
Скачиваний:
156
Добавлен:
01.06.2019
Размер:
104.88 Кб
Скачать

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

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

учреждение высшего образования

«Санкт-Петербургский государственный электротехнический университет им. В.И. Ульянова (Ленина)»

(СПбГЭТУ «ЛЭТИ»)

Факультет компьютерных технологий и информатики

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

ОТЧЕТ

по лабораторной работе №1

на тему:

«Исследование внутреннего представления различных форматов данных»

по дисциплине: «Организация ЭВМ и систем»

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

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

Санкт-Петербург

2018 г.

Содержание

Введение…………………………………………………...…..………………….3

  1. Задание ……………………………………………………………………….3

  2. Текст программы……………………………………………………………..6

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

  4. Структурная схема аппаратных средств, используемых при выполнении программы……………………………………………………………………11

Заключение………………………………………………………………………11

Введение

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

1. Задание

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

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;

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

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, используемые компьютером при их обработке.