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

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

.docx
Скачиваний:
5
Добавлен:
19.06.2023
Размер:
117.49 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ

Санкт-Петербургский государственный

электротехнический университет

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

отчЁт

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

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

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

Студент гр. 9300

ФИО

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

Лебедев С. В.

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

2020

Задание.

Разработать алгоритм ввода с клавиатуры типов данных unsigned long и float и показать на экране их внутреннее представление в двоичной системе счисления. Преобразовать полученный двоичный код, поменяв местами значения рядом стоящих бит в парах. Количество пар и номер старшего разряда левой пары задаётся с клавиатуры. Вывести преобразованный код в двоичной системе счисления и в исходном формате.

Блок-схема алгоритма.

Рисунок 1. Блок-схема для одного числа.

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

#include <iostream> unsigned pairsHigh; unsigned pairsCount; void printBinary(unsigned size, unsigned long value) { for (unsigned i = 8 * size; i > 0; --i) { std::cout << bool(value & (1ul << (i - 1))); } std::cout << std::endl; } void swapBits(unsigned long &value) { for (unsigned i = 0; i < pairsCount; ++i) { unsigned offset = pairsHigh - i * 2; bool tmp = value & (1ul << offset); if (value & (1ul << (offset - 1))) value |= 1ul << offset; else value &= ~(1ul << offset); if (tmp) value |= 1ul << (offset - 1); else value &= ~(1ul << (offset - 1)); } } void pairInputs(unsigned size) { std::cout << "Enter pairs high bit: "; std::cin >> pairsHigh; while (pairsHigh >= 8 * size || pairsHigh <= 0) { std::cout << "Invalid value. Enter other pairs high bit: "; std::cin >> pairsHigh; } std::cout << "Enter pairs count: "; std::cin >> pairsCount; while (pairsHigh + 1 < pairsCount * 2 || pairsCount <= 0) { std::cout << "Invalid value. Enter other pairs count: "; std::cin >> pairsCount; } } int main() { // Unsigned Long unsigned long a; std::cout << "Enter an unsigned long number: "; std::cin >> a; std::cout << "Binary: "; printBinary(sizeof(a), a); pairInputs(sizeof(a)); swapBits(a); std::cout << "Binary: "; printBinary(sizeof(a), a); std::cout << "Regular: " << a << std::endl; // Float union{ unsigned long ul = 0; float f; }; std::cout << "Enter a float number: "; std::cin >> f; std::cout << "Binary: "; printBinary(sizeof(f), ul); pairInputs(sizeof(f)); swapBits(ul); std::cout << "Binary: "; printBinary(sizeof(f), ul); std::cout << "Regular: " << f << std::endl; char pause; std::cin >> pause; return 0; }

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

Пример 1.

Enter an unsigned long number: 133

Binary: 0000000000000000000000000000000000000000000000000000000010000101

Enter pairs high bit: 3

Enter pairs count: 1

Binary: 0000000000000000000000000000000000000000000000000000000010001001

Regular: 137

Enter a float number: 3.14

Binary: 01000000010010001111010111000011

Enter pairs high bit: 10

Enter pairs count: 1

Binary: 01000000010010001111001111000011

Regular: 3.13988

Пример 2.

Enter an unsigned long number: 128

Binary: 0000000000000000000000000000000000000000000000000000000010000000

Enter pairs high bit: 1000

Invalid value. Enter other pairs high bit: 8

Enter pairs count: 1

Binary: 0000000000000000000000000000000000000000000000000000000100000000

Regular: 256

Enter a float number: -3.14

Binary: 11000000010010001111010111000011

Enter pairs high bit: 22

Enter pairs count: 11

Binary: 11000000001100010110101110100101

Regular: -2.7722

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

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

Вывод.

Было изучено внутреннее представление целочисленных и вещественных типов данных, разработан алгоритм, показывающий внутреннее представление чисел типов unsigned long и float в двоичной системе счисления.

Соседние файлы в предмете Организация ЭВМ и вычислительных систем