Всякие лабы / Laboratornaya_rabota_1
.docxМинистерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ» им. В.И. Ульянова (Ленина)»
Кафедра вычислительной техники
отчет
по лабораторной работе №1
по дисциплине «Организация ЭВМ и систем»
Тема: Исследование внутреннего представления различных форматов данных
Студент гр. 5392 |
|
Нургазы Б.К |
Студент гр. 5392 |
|
Юсупов Н.Г. |
Преподаватель |
|
Иванов Д.М. |
Санкт-Петербург
2017
Задание:
Для форматов char и long double разработать алгоритм ввода с клавиатуры данных и показать на экране их внутреннее представление в двоичной системе счисления
Написать и отладить программу на языке С++, реализующую разработанный алгоритм
Произвести зеркальную перестановку битов, количество которых и номер старшего бита задаются пользователем
Вывести полученные данные на экран
Текст программы:
#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
Структурная схема аппаратных средств, используемых при выполнении программы:
ЦП – центральный процессор.
АЛУ – арифметико-логическое устройство.
УУ – устройство управления.
ОЗУ – оперативное запоминающее устройство.
ПЗУ – постоянное запоминающее устройство.
НЖМД – накопитель на жёстком магнитном диске (винчестер).