История. Практическая работа 1 (битовые операции). Практическая работа 1 Тема. Поразрядные операции и их применение Цель. Получить навыки применения поразрядных операций в алгоритмах
Скачать 35.7 Kb.
|
|
№ | 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 семизначных чисел) в памяти, массив битов.
Примечание. Задача и алгоритм ее решения рассмотрены на практическом занятии. Файл не использовать, смоделируйте тест на последовательности, вводимой с клавиатуры.
Структура отчета
Уточненная постановка задачи (по материалам практического задания)
Описание структуры, используемой в решении, для представления данных в оперативной памяти.
Алгоритм решения (неформальное описание алгоритмов трех основных задач реализующих задачу).
Тестовый пример, демонстрирующий входные данные и заполненный битовый массив (не более 20 чисел).
Код программы.
Скрины результатов тестирования программы для входных данных объемом 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. Структура отчета по выполненному заданию
Титульный лист с указанием темы
Формулировка общего задания
Указать номер вариант и задание варианта (строка из таблицы варианта).
Для каждого пункта задания варианта
Номер и условие задачи пункта задания варианта
Разработка решения задачи пункта
Записать выражение, реализующее операцию
Если для решения задачи пункта требуется маска, то привести два выражения для случаев:
маска определяется при инициализации переменной, например:
unsigned short maska=0x0030;
маска формируется в выражении из пункта соответствующей константы (1 или 0) в младшем или старшем разряде, например, (1<<3); (0x80>>3).
Тестовый пример с представлением двоичного кода необходимых операндов выражения, двоичный код результата вычисления выражения.
Пример подготовки маски, чтобы обнулить n=4 разрядов, начиная с бита в позиции р, некоторой переменной х
1) 0<
2)(0<
3) сдвиг последних n единиц в позицию р
((0<
4) Инвертирование всех разрядов
(((0<
Реализация решения
Код функции, реализующей задание пункта задачи вариант.
Результаты тестирования на тестах (п.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Е |