Цвинтарный_Иван_362_1_Лабораторная_работа_10
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра промышленной электроники (ПрЭ)
ОТЧЁТ
по результатам лабораторной работы №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 – Результат работы программы, используя поразрядный сдвиг
Заключение
В ходе лабораторной работы освоили умение работать с разрядами в байте. Научились изменять произвольный бит в байте, не меняя остальных. Научились выводить на экран двоичный код переменной произвольного типа. Повысили понимание преобразований двоичного формата. Закрепили навыки, приобретенные в прошлых лабораторных работах.