Исследование внутреннего представления различных форматов данных
Скачать 60.25 Kb.
|
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ» им. В.И. Ульянова (Ленина)» Кафедра вычислительной техники отчет по лабораторной работе №1 по дисциплине «Организация ЭВМ и систем» Тема: Исследование внутреннего представления различных форматов данных
Санкт-Петербург 2017 Задание:Для форматов char и long double разработать алгоритм ввода с клавиатуры данных и показать на экране их внутреннее представление в двоичной системе счисления Написать и отладить программу на языке С++, реализующую разработанный алгоритм Произвести зеркальную перестановку битов, количество которых и номер старшего бита задаются пользователем Вывести полученные данные на экран Текст программы:#include "stdafx.h"#include #include #include #include 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 {k++;if ((number & (1 << i)) && !(number & (1 << j))){number |= (1 << j);number &=(1 << i);}else if ((number & (1 << j)) && !(number & (1 <{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 {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 Структурная схема аппаратных средств, используемых при выполнении программы:ЦП – центральный процессор. АЛУ – арифметико-логическое устройство. УУ – устройство управления. ОЗУ – оперативное запоминающее устройство. ПЗУ – постоянное запоминающее устройство. НЖМД – накопитель на жёстком магнитном диске (винчестер). |