Исследование внутреннего представления различных форматов данных
Автор: Zlata Z • Декабрь 15, 2023 • Лабораторная работа • 1,042 Слов (5 Страниц) • 79 Просмотры
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В. И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра вычислительной техники
ОТЧЁТ
по лабораторной работе №1
по дисциплине «Организация ЭВМ и систем»
Тема: Исследование внутреннего представления различных форматов данных
Выполнила: Жилинко З.В
Преподаватель: Гречухин М. Н.
Санкт-Петербург
2023
Цель работы: знакомство с внутренним представлением различных типов данных, используемых компьютером при их обработке.
Задание: разработать алгоритм ввода с клавиатуры требуемых типов данных и показать на экране их внутреннее представление в двоичной системе счисления. Написать и отладить программу на языке С++, реализующую разработанный алгоритм. В соответствии с заданием дополнить разработанный ранее алгоритм блоками для выполнения преобразования двоичного полученного кода исходного типа данных и последующего вывода преобразованного кода в двоичной системе счисления и в формате исходного данного.
Выполнить в пределах группы бит путём сдвига вправо все биты, значение которых равно единице и влево все биты, значение которых равно нулю.
Блок-схема алгоритма
[pic 1]
Рис. 1. Схема алгоритма
Текст программы
#include <iostream>
#include <string>
#include <conio.h>
#include <algorithm>
using namespace std;
union num
{
double d;
char bytes[sizeof(double)];
};
string toBinary(unsigned char& t)
{
string s = "";
int n = sizeof(unsigned char) * 8;
for (int i = n - 1; i >= 0; i--)
{
s += (t & (1 << i)) ? "1" : "0";
}
return s;
}
string toBinary(num t)
{
string s = "";
// little endian -> big endian
for (unsigned i = 0; i < sizeof(double); i++)
{
for (int j = 0; j <= 7; j++)
{
s += (t.bytes[i] & ((1 << j)) ? "1" : "0");
}
}
reverse(s.begin(), s.end());
return s;
}
string Convert(string& s, short cnt, short r, unsigned char &x)
{
// формируем строку
string tmp = "";
int r_t = r;
for (int i = 0; i < cnt; i++)
{
tmp += s[s.length() - 1 - r_t];
r_t--;
}
// сдвиг
for (int i = 0; i < cnt; i++)
{
if (tmp[i] == char(49))
{
x >>= 1;
}
else
{
x <<= 1;
}
r--;
}
s = toBinary(x);
...