АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Задание 2. Побитовые операции на ЯП С/С++

Читайте также:
  1. А) Задание по вводу в действие производственных мощностей
  2. Аналитическое задание
  3. ДЗ Домашнее задание по теме «Алкалоиды»
  4. Домашнее задание
  5. Домашнее задание
  6. Домашнее задание к занятию № 1 по теме
  7. Домашнее задание к занятию № 2 по теме
  8. Домашнее задание №1
  9. Домашнее задание №2
  10. Домашнее задание №4
  11. Дополнительное задание
  12. Дополнительное задание.

ЛАБОРАТОРНАЯ РАБОТА №5

Побитовые операции на ЯП С / С++

 

Цель работы: получить навыки программирования побитовых операций на ЯП С/С++

 

Задания для подготовки к работе

1. Изучить различные виды побитовых операций в ЯП С/С++

2. Научиться использовать операции сдвига, логического И, ИЛИ и исключающего ИЛИ.

3. Разработать алгоритм и составить программу для решения задачи

4. Подобрать наборы тестовых данных.

 

Содержание отчета

1. Описание используемых структур данных.

2. Блок-схема алгоритма основной задачи.

3. Наборы тестовых данных с обоснованием их выбора.

4. Текст программы.

5. Описание и анализ ошибок, выявленных при отладке программы.

 

Краткие теоретические сведения

Для осуществления сдвига последовательности бит влево и вправо применяются соответственно операции << и >>. Операнд справа от знака операции указывает, на какую величину должны быть сдвинуты биты, задавая тем самым количество бит, "выводимых" из переменной, и число нулевых бит, заполняющих переменную с другой стороны. Например:

unsigned char A = 12; // A = 000011002

A = A << 2; // A = 001100002

A = A >> 3; // A = 000001102

Следует отметить, что операции логического сдвига влево и вправо на некоторое число бит аналогичны, соответственно, умножению и делению числа (находящегося слева от оператора) на 2, возведенное в эту степень:

A << N = A * 2N

A >> N = A / 2N

На практике для осуществления доступа к отдельным битам, используются так называемые поразрядные логические операции, приведенные в таблице:

& логическое И/AND (умножение)
| логическое ИЛИ/OR (сложение)
^ исключающее ИЛИ (XOR)
~ логическое НЕ (инверсия)

 

Результат применения оператора "логическое И" к двум битам равен единице только тогда, когда оба операнда установлены в единицу:

A B C = A & B
     
     
     
     

 

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

A B C = A | B
     
     
     
     

Операция исключающего ИЛИ возвращает единицу только в том случае, если операнды не равны:

A B C = A ^ B
     
     
     
     

 

Наконец, операция "логическое НЕ" инвертирует биты (меняет значение на противоположное).

A C = ~A
   
   

 

Например:

int main() {

int A, B, C;

 

A = 213, // A = 110101012

B = 10; // B = 000010102

// Установим 1 и 3 биты

C = A | B; // C = 110111112

 

// Обнулим 1 и 2 биты

B = 249; // B = 111110012

C = C & B; // C = 110100012

 

return 0;

}

Задание к работе

Задание 1

Найти значение выражения согласно варианту.

Для операций умножения и деления использовать сдвиг влево и вправо!

Исходные данные считать из файла А, а результат записать в файл В.

№ варианта Выражение № варианта Выражение
  Y=9∙(a+2b)/8   Y=7∙(a/4+2b)
  Y=(11a+7b)/4   Y=12∙(a+3b)/4
  Y=13∙(2a+b/8)   Y=3∙(a/2+19b)
  Y=7∙(a/4+2b)   Y=16∙(a+3b/2)
  Y=12∙(a+3b)/4   Y=4∙(7a/4+b)
  Y=3∙(a/2+19b)   Y=(11a/4+2b)
  Y=16∙(a+3b/2)   Y=13∙(a/4+2b)
  Y=4∙(7a/4+b)   Y=(11a+7b)/4
  Y=(11a/4+2b)   Y=13∙(2a+b/8)
  Y=13∙(a/4+2b)   Y=7∙(a/4+2b)
  Y=9∙(a+2b)/8   Y=12∙(a+3b)/4
  Y=(11a+7b)/4   Y=3∙(a/2+19b)
  Y=13∙(2a+b/8)   Y=13∙(2a+b/8)

 

Задание 2

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

Примечание:

"Выделить" бит, означает обнулить все биты кроме указанных, а указанные оставить без изменений.

Нумерация бит в данном задании для удобства осуществляется от 1 до 8 (справа налево). На практике же используется нумерация с 0.

№ варианта Число Выделить Обнулить Установить Инвертировать
    1,2 бит 3,4 бит 5 бит 6,7 бит
    1,3 бит 4,5 бит 2 бит 6,8 бит
    1 бит 3 бит 2,5 бит 7 бит
    2,4 бит 1,3 бит 7 бит 5 бит
    2 бит 1,4 бит 3 бит 7,8 бит
    5,6 бит 3,4 бит 1,2 бит 8 бит
    3,4,5 бит 1,2 бит 6,7 бит 8 бит
    1,2,3 бит 3,4 бит 5 бит 6,7 бит
    2,3 бит 1,4 бит 6 бит 5,7 бит
    2,3,4 бит 5 бит 1 бит 7,8 бит
    1,2 бит 3,4 бит 5 бит 6,7 бит
    1,3 бит 4,5 бит 2 бит 6,8 бит
    1 бит 3 бит 2,5 бит 7 бит
    2,4 бит 1,3 бит 7 бит 5 бит
    2 бит 1,4 бит 3 бит 7,8 бит
    5,6 бит 3,4 бит 1,2 бит 8 бит
    3,4,5 бит 1,2 бит 6,7 бит 8 бит
    1,2,3 бит 3,4 бит 5 бит 6,7 бит
    2,3 бит 1,4 бит 6 бит 5,7 бит
    2,3,4 бит 5 бит 1 бит 7,8 бит
    2 бит 1,4 бит 3 бит 7,8 бит
    5,6 бит 3,4 бит 1,2 бит 8 бит
    3,4,5 бит 1,2 бит 6,7 бит 8 бит
    1,2,3 бит 3,4 бит 5 бит 6,7 бит
    2,3 бит 1,4 бит 6 бит 5,7 бит
    2,3,4 бит 5 бит 1 бит 7,8 бит

 

Контрольные вопросы

1. Виды побитовых операций

2. Особенности выполнения побитового «сдвига влево», «сдвига вправо»

3. Объявление и работа с битовыми полями структур

4. Объединения и работа с ними

 


Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)