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

Всякие лабы / Laboratornaya_rabota_1

.docx
Скачиваний:
29
Добавлен:
04.11.2020
Размер:
61.7 Кб
Скачать

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

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

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

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

отчет

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

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

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

Студент гр. 5392

Нургазы Б.К

Студент гр. 5392

Юсупов Н.Г.

Преподаватель

Иванов Д.М.

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

2017

Задание:

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

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

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

  4. Вывести полученные данные на экран

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

#include "stdafx.h"

#include <typeinfo>

#include <iostream>

#include <algorithm>

#include <cmath>

using namespace std;

void printChar(unsigned char number)

{

for (int i = 0;i < 8;++i)

{

cout << ((number >> (8 - i - 1)) & 1) << " ";

}

cout << endl;

}

unsigned char ReverseBits(unsigned char number, int old, int n) {

int k = 0;

for (int i = 0;i < 8;++i)

{

for (int j = 0;j < 8;++j)

{

if (i == old - n + 1+k && j == old-k && i<j)

{

k++;

if ((number & (1 << i)) && !(number & (1 << j)))

{

number |= (1 << j);

number &= ~(1 << i);

}

else if ((number & (1 << j)) && !(number & (1 <<i)))

{

number |= (1 << i);

number &= ~(1 << j);

}

}

}

}

return number;

}

union LongD

{

long double l;

char ld1[8];

};

int a[64];

int p = 0;

void printLongDouble(LongD y)

{

for (int i = 0;i < 8;++i)

{

for (int j = 0;j < 8;++j)

{

cout << ((y.ld1[8 - i - 1] >> (8 - j - 1)) & 1) << " ";

a[p] = ((y.ld1[8 - i - 1] >> (8 - j - 1)) & 1);

p++;

}

}

cout << endl;

}

LongD ReverseBitsLD(LongD y, int old, int n) {

int k = 0;

for (int i = 0;i < 64;++i)

{

for (int j = 0;j < 64;++j)

{

if (i == old - n + 1 + k && j == old - k && i<j)

{

swap(a[i],a[j]);

k++;

}

}

}

for (int i = 0;i < 64;++i)

{

cout << a[i] << " ";

}

return y;

}

int main() {

setlocale(0, "");

unsigned char symbol;

int c;

int n;

cout << " Тип данных: char " << endl;

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

cin >> symbol;

cout << "Введите старший разряд: ";

cin >> c;

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

cin >> n;

system("cls");

cout << "Введенный символ:";

cout << symbol << endl;

cout << "Представление введенного символа в двоичном коде: ";

printChar(symbol);

unsigned char y = ReverseBits(symbol, c, n);

cout << "Новый символ:";

cout << char(y) << endl;

cout << "Представление символа в двоичном коде после преобразования: ";

printChar(y);

int q;

int w;

cin.get();

cin.get();

system("cls");

LongD yy;

cout << " Тип данных: long double " << endl;

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

cin >> yy.l;

cout << "Введите старший разряд: ";

cin >> q;

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

cin >> w;

system("cls");

cout << "Представление введенного числа в двоичном коде: ";

printLongDouble(yy);

cout << endl;

cout << "Представление числа в двоичном коде после преобразования: ";

cout << endl;

yy = ReverseBitsLD(yy, q, w);

cin.get();

cin.get();

return 0;

}

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

Рисунок 1 - Обработка типа char

Рисунок 2 - Обработка типа double

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

ЦП – центральный процессор.

АЛУ – арифметико-логическое устройство.

УУ – устройство управления.

ОЗУ – оперативное запоминающее устройство.

ПЗУ – постоянное запоминающее устройство.

НЖМД – накопитель на жёстком магнитном диске (винчестер).

Соседние файлы в папке Всякие лабы