Исследование внутреннего представления различных форматов данных
Автор: Myrz • Октябрь 20, 2023 • Лабораторная работа • 2,208 Слов (9 Страниц) • 173 Просмотры
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра Вычислительной Техники
ОТЧЕТ
по лабораторной работе №1
по дисциплине «Организация ЭВМ и систем»
Тема: ИССЛЕДОВАНИЕ ВНУТРЕННЕГО ПРЕДСТАВЛЕНИЯ РАЗЛИЧНЫХ ФОРМАТОВ ДАННЫХ
Студенты гр. 1371 | Малиева Д. И. | |
Преподаватель | Ельчанинов М. Н. |
Санкт-Петербург
2022
Постановка задачи.
Знакомство с внутренним представлением различных типов данных, используемых компьютером при их обработке.
Разработать алгоритм ввода с клавиатуры типов данных (unsigned int, double) и показать на экране их внутреннее представление в двоичной системе счисления.
Установить в заданное пользователем состояние определённое количество рядом стоящих бит, номер младшего из которых, как и всё остальное, вводится с клавиатуры.
Ход работы
[pic 1]
[pic 2]
#include <iostream>
#include <limits>
#include <Windows.h>
using namespace std;
/*
Задание - вывести unsigned int и double
Установить в заданное пользователем состояние определённое количество рядом стоящих бит,
номер младшего из которых, как и всё остальное, вводится с клавиатуры.
*/
union myDouble {
unsigned char arr[8];
double value;
long long integer;
};
void output_unsigned_int(unsigned int value) {
int k = (int)value;
int* arr = new int[32];
for (int i = 0; i < 32; i++) {
arr[i] = k % 2;
k = k / 2;
}
for (int i = 31; i >= 0; i--) {
cout << arr[i];
}
}
void output_unsigned_char(unsigned char value) {
int k = (int)value;
int* arr = new int[8];
for (int i = 0; i < 8; i++) {
arr[i] = k % 2;
k = k / 2;
}
for (int i = 7; i >= 0; i--) {
cout << arr[i];
}
}
void output_double(myDouble count) {
for (int i = 0; i < 8; i++) {
output_unsigned_char(count.arr[7 - i]);
}
}
unsigned int function_unsigned_int(unsigned int value, int rank, int amount, bool state) {
for (int i = rank; i <= rank + amount; i++) {
if (state)
value |= (1 << i);
else
value &= (0 << i);
}
return value;
}
myDouble function_double(myDouble value, int rank, int amount, bool state) {
for (int i = rank; i <= rank + amount; i++) {
if (state)
value.integer |= 1LL << i;
else
value.integer &= ~(1LL << i);
}
return value;
}
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int choice;
cout << "Введите\n 0 - если хотите выйти," <<
...