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

2017 Холод / ЭВМ 1

.docx
Скачиваний:
46
Добавлен:
14.11.2018
Размер:
142.43 Кб
Скачать

Министерство науки и образования РФ

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

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

«Санкт-Петербургский государственный электротехнический

университет «ЛЭТИ» им. В. И. Ульянова (Ленина)»

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

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

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

Отчет

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

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

на тему:

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

форматов данных”

Выполнил:

Студент группы 6307

Лазарев Сергей Олегович

Принял:

к.т.н., доцент

Холод Иван Иванович

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

Оглавление

Цель работы 3

1. Задание 3

2. Уточнение задания 3

3. Схема алгоритма 4

4. Текст программы 5

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

5. Структура схемы аппаратных средств 8

Цель работы

Исследовать внутреннее представление различных форматов данных.

1. Задание

  1. Разработать алгоритм ввода с клавиатуры требуемых типов данных и показать на экране их внутреннее представление в двоичной системе счисления.

2. Написать и отладить программу на языке С++, реализующую

разработанный алгоритм.

3. В соответствии с заданием дополнить разработанный ранее алгоритм

блоками для выполнения преобразования двоичного полученного кода исходного

типа данных и последующего вывода преобразованного кода в двоичной системе счисления и в формате исходного данного.

2. Уточнение задания

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

Использованные структуры:

union Data

{

double x;

unsigned long long y;

};

struct D

{

int* bitPosition = NULL; // указатель на позицию изменяемого бита

int kolvo = 0; // количество бит, которое нужно обработать

int value = 0; // 1 или 0

};

3. Схема алгоритма

Схема алгоритма представлена на рис 1.

Рис 1. Схема алгоритма

4. Текст программы

#include "stdafx.h"

#include <iostream>

#include <locale>

#include <Windows.h>

#include <stdio.h>

using namespace std;

union Data

{

double x;

unsigned long long y;

};

struct D

{

int* bitPosition = NULL;

int kolvo = 0;

int value = 0;

};

template <typename T, typename U>

T bitMaker(T a, struct D data, U f)

{

for(int i = 0; i < data.kolvo; i++)

if (data.value)

a = a | (f << data.bitPosition[i]);

else

a = a & ~(f << data.bitPosition[i]);

return a;

}

struct D enter()

{

struct D data;

cout << "Введите количество разрядов: ";

cin >> data.kolvo;

data.bitPosition = new int[data.kolvo];

for (int i = 0; i < data.kolvo; i++)

{

cout << "Введите " << i + 1 << " разряд: ";

cin >> data.bitPosition[i];

}

cout << "1 или 0: ";

cin >> data.value;

return data;

}

template <typename T, typename U>

void print(T a, int i, U f)

{

for (; i >= 0; i--)

{

if (a & (f << i))

printf("1");

else

printf("0");

}

puts("");

}

int main()

{

setlocale(LC_ALL, "RU");

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int digit;

cout << "Введите число Int: ";

cin >> digit;

print(digit, 31, 1);

D dataInt = enter();

system("cls");

cout << endl << " Было Int: ";

print(digit,31, 1);

digit = bitMaker(digit, dataInt, 1);

cout << "Стало Int: ";

print(digit,31, 1);

cout << "New Int: " << digit << endl;

puts("\n\n");

Data data;

cout << "Введите число Double: ";

cin >> data.x;

cout << "Двоичное представление: ";

print(data.y, 63, 1ULL);

D dataD = enter();

cout << endl << " Было Double: ";

print(data.y, 63, 1ULL);

data.y = bitMaker(data.y, dataD, 1ULL);

cout << "Стало Double: ";

print(data.y, 63, 1ULL);

cout << "New Double: " << data.x << endl;

system("pause");

}

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

  1. Int:

  1. Double:

Рис. 4

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

Рис. 3 Внутреннее устройство центрального процессора

Рис. 4 Схема аппаратных средств

Соседние файлы в папке 2017 Холод