Организация ЭВМ. Лабораторная №1. Исследование внутреннего представления
![]()
|
МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина) Кафедра вычислительной техники отчет по лабораторной работе №1 по дисциплине «Организация ЭВМ и систем» Тема: Исследование внутреннего представления различных форматов данных
Санкт-Петербург 2021 Цель работы. Знакомство с внутренним представлением различных типов данных, используемых компьютером при их обработке. Задание (вариант 14). Разработать алгоритм ввода с клавиатуры чисел типов данных Short Int и Double и показать на экране их внутреннее представление в двоичной системе счисления. Написать и отладить программу на языке C++, реализующую разработанный алгоритм. Дополнить алгоритм блоками для инвертирования значения рядом стоящих бит, количество которых и номер старшего разряда задаются с клавиатуры. И вывести значение числа с инвертированными битами. Блок-схема алгоритма
![]() Текст программы #include #include void ShowBinaryShortInt (short int x) //Представление типа данных Short Int в памяти { unsigned long long* p = reinterpret_cast std::cout << "Номер бита: "; for (int i = 1; i <= sizeof(short int) * 8; i++) { std::cout<< i-1 < } std::cout << std::endl; std::cout << "Машин. код: "; for (int i = 1; i <= sizeof(short int) * 8; i++) { std::cout << ((*p) & 1)< (*p) >>= 1; // сдвигаем на 1 бит } std::cout << std::endl; } void InvertBitShortInt(short int x) //Инвертирование выбранных битов { int OldBit; int amountBit; do { std::cout << "Введите старший бит (значение должно принадлежать интервалу от 1 до 16): " << std::endl; std::cin >> OldBit; } while (OldBit>16); do { std::cout << "Введите количество битов, которые надо инвертировать (значение должно быть меньше значения старшего бита): " << std::endl; std::cin >> amountBit; } while (amountBit>OldBit); for (int i = (OldBit-1); i >= (OldBit - amountBit); i--) { x ^= (1 << i); } std::cout << "Значение инвентированных бит: " << std::endl; ShowBinaryShortInt(x); } void ShowBinaryDouble(double x) //Представление типа данных Double в памяти { unsigned long long* p = reinterpret_cast std::cout << "Представление в памяти числа типа Double (старший бит справа): "; for (int i = 1; i <= sizeof(double) * 8; i++) { std::cout << ((*p) & 1) << std::setw(1); // выводим самый правый бит (*p) >>= 1; // сдвигаем на 1 бит } std::cout << std::endl; } int main() { setlocale(LC_ALL, "Russian"); int chosen; do { std::cout << "1. Представление типа данных Short Int в памяти и инверсия выбранных битов." << std::endl; std::cout << "2. Представление типа данных Double в памяти." << std::endl; std::cout << "3. Выход из программы." << std::endl; std::cin >> chosen; switch (chosen) { case 1: short int a; do { std::cout << "Введите число типа Short Int (значение должно быть от –32768 до 32767): " << std::endl; std::cin >> a; } while (a > 32767 || a < -32768); ShowBinaryShortInt(a); InvertBitShortInt(a); case 2: double b; do { std::cout << "Введите число типа Double (значение должно быть от -9223372036854775808 до 9223372036854775807): " << std::endl; std::cin >> b; } while (b > 9223372036854775807); ShowBinaryDouble(b); system("pause"); case 3: break; } } while (chosen!=3); } Примеры запуска программы Пример запуска программы с верными условиями. ![]() ![]() Пример запуска программы с неверными условиями. Вывод В результате выполнения лабораторной работы был изучен принцип внутреннего представления данных Short Int и Double. |