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

Цвинтарный_Иван_362_1_Лабораторная_работа_10

.docx
Скачиваний:
2
Добавлен:
21.06.2023
Размер:
53.18 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра промышленной электроники (ПрЭ)

ОТЧЁТ

по результатам лабораторной работы №10

по дисциплине «Информатика»

Поразрядные операции

Выполнил

Студент гр. 362-1

________ Цвинтарный И.В.

«___» __________

Проверил

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

_____________ Савин Д.А.

«___»__________

Томск 2023

Оглавление

Введение 3

1. Ход работы 4

2. Индивидуальное задание 5

3. Программный код – текст программы 5

4. Результаты работы программы 7

Заключение 8

Введение

В десятой лабораторной работе нам необходимо освоить умение работать с разрядами в байте. Научиться изменять произвольный бит в байте, не меняя остальных. Выводить на экран двоичный код переменной произвольного типа. Повысить понимание преобразований двоичного формата.

1. Ход работы

1. Создать динамическую переменную и написать программу для работы с разрядами этой переменной в соответствии со своим вариантом индивидуального задания двумя способами:

• Используя операции поразрядного сдвига и поразрядные логические операции

• Используя структуру объединение (union) с использованием битовых полей

2. При программировании обоими способами выводить данные на экран в десятичном и двоичном форматах. Выводить на экран размер задаваемой переменной/структуры.

3. Корректно создать и уничтожить динамическую переменную.

4. По выполненной лабораторной работе подготовить отчет с результатами работы программы.

2. Индивидуальное задание

Вариант индивидуального задания – 23.

Рисунок 2.1 – Формулировка задания

3. Программный код – текст программы

#include <iostream>

using namespace std;

struct Bitmap

{

bool b0 : 1;

bool b1 : 1;

bool b2 : 1;

bool b3 : 1;

bool b4 : 1;

bool b5 : 1;

bool b6 : 1;

bool b7 : 1;

};

union number

{

unsigned int u;

Bitmap bm[4]; //поле bm типа Bitmap

};

void print_union(number d);

void print_logic(unsigned int u);

void process_logic(unsigned int u);

void process_union(number d);

int main()

{

setlocale(LC_ALL, "RUS");

number n; //n типа number

n.u = 100;

process_union(n);

process_logic(n.u);

}

void print_union(number d) //Вывод значения переменной типа number в двоичной форме, используя структуру union

{

for (int i = 3; i >= 0; i--)

{

cout << d.bm[i].b7 << d.bm[i].b6 << d.bm[i].b5 << d.bm[i].b4 << d.bm[i].b3 <<

d.bm[i].b2 << d.bm[i].b1 << d.bm[i].b0;

}

cout << " (" << d.u << ") " << endl; // << оператор вставки

}

void print_logic(unsigned int u) //Вывод значения переменной типа unsigned int в двоичной форме, используя маску и сдвиг

{

unsigned int mask = 1 << 31; // 1 в старшем разряде. << оператор сдвига

for (int i = 0; i < 32; i++)

{

if ((u & mask) == 0) // Если знаение u = 0, то бит равен 0

cout << "0";

else

cout << "1"; // Иначе бит равен 1, маска сдвигается вправо на 1, чтобы проверить следующий бит

mask >>= 1;

}

cout << " (" << u << ") " << endl;

}

void process_union(number d)

{

for (int i = 0; i < 4; i++)

{

d.bm[i].b0 = d.bm[i].b1 = d.bm[i].b2 = d.bm[i].b3 = d.bm[i].b4 = d.bm[i].b5 =

d.bm[i].b6 = d.bm[i].b7 = 1;

}

d.bm[0].b0 = 0;

print_union(d);

for (int i = 0; i < 31; i++)

{

d.u *= 2;

d.bm[0].b0 = 1;

print_union(d);

}

cout << endl;

}

void process_logic(unsigned int u)

{

u = ~1; // ~ поразрядное отрицание. Все биты в числе, кроме нулевого, устанавливаются в 1

print_logic(u);

for (int i = 0; i < 31; i++)

{

u = u << 1; // Сдвиг влево на 1

u = u | 1; // Установка бита в 1

// Таким образом, в подпрограмме крайний правый бит будет устанавливаться в 1

print_logic(u);

}

cout << endl;

}

//Поразрядные: ~ & | ^}

4. Результаты работы программы

Рисунок 4.1 – Результат работы программы, используя union и битовые поля

Рисунок 4.2 – Результат работы программы, используя поразрядный сдвиг

Заключение

В ходе лабораторной работы освоили умение работать с разрядами в байте. Научились изменять произвольный бит в байте, не меняя остальных. Научились выводить на экран двоичный код переменной произвольного типа. Повысили понимание преобразований двоичного формата. Закрепили навыки, приобретенные в прошлых лабораторных работах.