Главная страница

История. Практическая работа 1 (битовые операции). Практическая работа 1 Тема. Поразрядные операции и их применение Цель. Получить навыки применения поразрядных операций в алгоритмах


Скачать 35.7 Kb.
НазваниеПрактическая работа 1 Тема. Поразрядные операции и их применение Цель. Получить навыки применения поразрядных операций в алгоритмах
АнкорИстория
Дата17.11.2022
Размер35.7 Kb.
Формат файлаdocx
Имя файлаПрактическая работа 1 (битовые операции).docx
ТипПрактическая работа
#795193


Практическая работа 1

Тема. Поразрядные операции и их применение

Цель. Получить навыки применения поразрядных операций в алгоритмах

В практической работе надо выполнить два задания.

Задание 1.

Выполнить упражнения по применению битовых операций по изменению значений битов в ячейке оперативной памяти, созданию маски для изменения значения ячейки. Создание выражения, содержащего поразрядные операции, для выполнения определенной операции над значением ячейки.

В таблице 1 приведены варианты индивидуальных заданий. Номер варианта соответствует номеру студента в журнале учета посещений.

В каждом варианте пять упражнений, пронумерованных от 1 до 5 в столбцах таблицы 1.

В приложении приведены примеры выполнения поразрядных операций, код функции.

Требования к выполнению задания

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

Требования к упражнениям (номер требования определяет номер упражнения в таблице)

  1. Определить переменную целого типа, присвоить ей значение, используя константу в шестнадцатеричной системе счисления.

Разработать оператор присваивания и его выражение, которое установит заданные в задании биты исходного значения переменной в значение 1, используя соответствующую маску и поразрядную операцию.

  1. Определить переменную целого типа.

Разработать оператор присваивания и его выражение, которое обнуляет заданные в задании биты исходного значения переменной, используя соответствующую маску и поразрядную операцию. Значение в переменную вводится с клавиатуры.

  1. Определить переменную целого типа.

Разработать оператор присваивания и выражение, которое умножает значение переменной на число, указанное в третьем столбце варианта, используя соответствующую поразрядную операцию. Изменяемое число вводится с клавиатуры.

  1. Определить переменную целого типа.

Разработать оператор присваивания и выражение, которое делит значение переменной на число, указанное в четвертом столбце варианта, используя соответствующую поразрядную операцию. Изменяемое число вводится с клавиатуры.

  1. Определить переменную целого типа.

Разработать оператор присваивания и выражение, в котором используются только поразрядные операции. В выражении используется маска – переменная. Маска может быть инициализирована единицей в младшем разряде (вар 1) или единицей в старшем разряде (вар 2). Изменяемое число вводится с клавиатуры.

  1. Выполнить тестирование программы

  2. Оформить отчет

Варианты упражнений



1

Номер бита

2

Номер бита

3

множитель

4

делитель

5

Задание для выражения

1

5-ый и 7-ой справа

С 9-ого четыре бита слева

8

8

Установить n-ый бит в 1, используя маску (вар 1)

2

Три старших

12-ый, 14-ый, 3-ий

4

4

Установить n-ый бит в 1, используя маску (вар2)

3

Только с четными номерами

7-ой, 9-ый, 11-ый

16

16

Обнулить n-ый бит, используя маску (вар 1)

4

Только с не четными номерами

С 5-ого бита четыре слева

32

32

Установить n-ый бит в 1, используя маску (вар 2)

5

17-ый, 15-ый, 1-ый

С 5-ого бита три справа

64

64

Обнулить n-ый бит, используя маску (вар 2)

6

3-ий, 11-ый, 5-ый

Четыре младших бита

128

128

Установить n-ый бит в 1, используя маску (вар 2)

7

Четыре старших бита

9-ый, 11-ый, 3-ий

512

512

Обнулить n-ый бит, используя маску (вар 1)

8

1-ый, 6-ой, 9-ый

1-ый, 6-ой, 9-ый

8

8

Установить n-ый бит в 1, используя маску (вар 1)

9

0-ый, 11-ый, 3-ий

Четыре старших бита

4

4

Обнулить n-ый бит, используя маску (вар 2)

10

Четыре младших бита

3-ий, 11-ый, 5-ый

16

16

Установить n-ый бит в 1, используя маску (вар 2)

11

С 5-ого бита четыре слева

5-ый, 7-ой справа

32

32

Обнулить n-ый бит, используя маску (вар 1)

12

С 3-ого бита три справа

Три старших

64

64

Установить n-ый бит в 1, используя маску (вар 1)

13

7-ой, 9-ый, 11-ый

Только с четными номерами

128

128

Обнулить n-ый бит, используя маску (вар 1)

14

12-ый, 14-ый, 3-ий

Только с нечетными номерами

512

512

Установить n-ый бит в 1, используя маску (вар 2)

15

С 9-ого бита четыре слева

17-ий, 15-ый, 1-ый

1024

1024

Обнулить n-ый бит, используя маску (вар 1)

16

1-ый, 2-ой,7-ой

С 7-ого три бита слева

8

8

Обнулить n-ый бит, используя маску (вар 1)

17

С 3-ого бита четыре слева

12-ый, 11-ый, 1-ый

32

32

Обнулить n-ый бит, используя маску (вар 2)

18

3-ий, 5-ый, 8-ой

С 4-ого два бита слева

16

16

Обнулить n-ый бит, используя маску (вар 1)

19

1-ый, 5-ый, 6-ой

15-ый, 12-ый, 3-ий

128

128

Обнулить n-ый бит, используя маску (вар 1)

20

5-ый и 7-ой справа

С 7-ого четыре бита слева

16

8

Установить n-ый бит в 1, используя маску (вар 1)

21

Три младших разряда

11-ый, 12-ый, 3-ий

32

16

Установить n-ый бит в 1, используя маску (вар 2)

22

Только с не четными номерами

5-ой, 3-ый, 11-ый

8

16

Обнулить n-ый бит, используя маску (вар 1)

23

Только с четными номерами

С 15-ого бита четыре справа

16

32

Установить n-ый бит в 1, используя маску (вар 2)

24

18-ый, 22-ый, 1-ый

С 8-ого бита три слева

64

64

Обнулить n-ый бит, используя маску (вар 2)

25

7-ий, 13-ый, 5-ый

Четыре старших бита

512

128

Установить n-ый бит в 1, используя маску (вар 2)

26

Четыре старших бита

9-ый, 11-ый, 3-ий

128

512

Обнулить n-ый бит, используя маску (вар 1)

27

2-ый, 5-ой, 9-ый

2-ый,5-ой, 9-ый

16

32

Установить n-ый бит в 1, используя маску (вар 1)

28

5-ый, 11-ый, 3-ий

Четыре старших бита

32

32

Обнулить n-ый бит, используя маску (вар 2)

29

пять младших битов

7-ий, 9-ый, 5-ый

64

64

Установить n-ый бит в 1, используя маску (вар 2)

30

С 7-ого бита пять слева

5-ый, 7-ой , 11-ый

32

32

Обнулить n-ый бит, используя маску (вар 1)


Задание 2.


Реализовать задачу по сортировке данных файла, используя для представления данных файла (107 семизначных чисел) в памяти, массив битов.

Примечание. Задача и алгоритм ее решения рассмотрены на практическом занятии. Файл не использовать, смоделируйте тест на последовательности, вводимой с клавиатуры.

Структура отчета

        1. Уточненная постановка задачи (по материалам практического задания)

        2. Описание структуры, используемой в решении, для представления данных в оперативной памяти.

        3. Алгоритм решения (неформальное описание алгоритмов трех основных задач реализующих задачу).

        4. Тестовый пример, демонстрирующий входные данные и заполненный битовый массив (не более 20 чисел).

        5. Код программы.

        6. Скрины результатов тестирования программы для входных данных объемом 100 и 1000 чисел. Показать время выполнения сортировки для каждого объема.


Приложение 1. Пример реализации алгоритма вывода двоичного кода заданного значения


void coutp(unsigned int x)

{

int n=sizeof(int)*8;

unsigned maska=(1<<(n-1));

for(int i=1; i<=n;i++)

{

cout<<((x&maska)>>(n-i));

maska=maska>>1;

}

}

Приложение 2. Структура отчета по выполненному заданию


  1. Титульный лист с указанием темы

  2. Формулировка общего задания

Указать номер вариант и задание варианта (строка из таблицы варианта).

  1. Для каждого пункта задания варианта

  1. Номер и условие задачи пункта задания варианта

  2. Разработка решения задачи пункта

    1. Записать выражение, реализующее операцию

Если для решения задачи пункта требуется маска, то привести два выражения для случаев:

  1. маска определяется при инициализации переменной, например:

unsigned short maska=0x0030;

  1. маска формируется в выражении из пункта соответствующей константы (1 или 0) в младшем или старшем разряде, например, (1<<3); (0x80>>3).

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

Пример подготовки маски, чтобы обнулить n=4 разрядов, начиная с бита в позиции р, некоторой переменной х

1) 0<
2)(0<
3) сдвиг последних n единиц в позицию р

((0<
4) Инвертирование всех разрядов

(((0<

  1. Реализация решения

    1. Код функции, реализующей задание пункта задачи вариант.

    2. Результаты тестирования на тестах (п.2.2) в форме скриншота результата выполнения кода.

Приложение 3. Поразрядные операции




Инверсия (0 заменяет на 1, а 1 на 0)

x=0x0F;

x;

результат 0хF0

x<

Сдвиг влево двоичного кода (умножение на 2n)

unsigned int x=7; x=x<<2;

результат 0х0000001С

x>>n

Сдвиг вправо двоичного кода (деление на 2n)

unsigned int x=28; x=x>>2;

результат =0х00000007

x & maska

Поразрядное И (применяется для записи в указанный разряд 0)

Правило выполнения операции

111

& 100

= 100

Пример. Установить в двоичном коде переменной х только 9-ый справа бит в 0

Способы определения маски и решение

//Способ 1. Маска создана явно

unsigned short int x1=0xAEFF;

unsigned short int maska=0xFDFF;

x1=x1 & maska;

//Способ 2. Маска формируется инициализируется 1

maska=1;

x1=0xFFFF

x1=x1 & ( (maska<<9));

//Способ 3. Маска создается из 1 в выражении

x1=0xFFFF

x1=x1 & ( (1<<9));

или

x=x & ( (1<<9));

X | maska

Поразрядное ИЛИ (применяется для записи в указанный разряд 1)

Правило выполнения операции

111

| 100

111

Пример. Установить в двоичном коде переменной х 9-ый справа бит в 1.

Решение.

unsigned short int x=0xACFF;

unsigned short int maska=0x0200;

x=x | maska результат 0xAEFF;

maska=1;

x=x | ( (maska<<9));
или

x=x | ((1<<9));


X ^ maska

Исключающее ИЛИ для поразрядных операций. Используется для проверки соответствующих битов двух переменных, если они имеют разные значения, то результат 1, а если равны, то 0.

Правило выполнения операции

1111

^ 0001

= 1110

unsigned int x=0xF, a=1;

a=x^a;

Результат: в переменной а значение

0х0000000Е


написать администратору сайта