Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Лабораторная работа №5

Читайте также:
  1. IX. Учет и отчетность по научно-исследовательским работам
  2. VII. КУЛЬТУРНО – МАССОВАЯ, ФИЗКУЛЬТУРНАЯ И ОЗДОРОВИТЕЛЬНАЯ РАБОТА СО СТУДЕНТАМИ
  3. Акты по работам на трансформаторной подстанции
  4. Б. Работа в агрохимической лаборатории
  5. Б. Работа в агрохимической лаборатории
  6. Бедные и средний класс работают ради денег». «Богатые заставляют деньги работать на себя».
  7. Бесплатной выдачи работникам, занятым на работах с вредными условиями труда, молока или других равноценных пищевых продуктов, которые могут выдаваться работникам вместо молока

Тема работы «Побитовые (поразрядные) операторы»

  1. Цель работы

Приобретение навыков работы с побитовыми операторами языка С.

  1. Логические операции

В языке программирования С существуют два вида поразрядных операций: логические операции и операции сдвига [1].

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

Унарная операция ∼ преобразовывает все единицы в нули и все нули в единицы (предполагается, что операции производятся над двоичными числами). Данную операцию называют также операцией "дополнение", т.е. когда все биты, равные 0, устанавливаются в 1, а когда все биты, равные 1, – устанавливаются в 0.

Поразрядная операция И обозначается символом &.

Двоичная операция & создает новое значение за счет выполнения поразрядного сравнения двух операндов. Для каждой позиции результирующий разряд будет иметь значение 1 только в случае, когда соответствующие разряды обоих операндов имеют значение 1. Можно сказать, что когда над двумя значениями производится операция поразрядного умножения &, то двоичные представления чисел сравниваются бит за битом [2]. Например, пусть одна переменная w1 есть число 25, а другая w2 – число 77. Соответственно в двоичном представлении 25 = 0000000000011001, 77 = 0000000001001101. Тогда в результате поразрядной операции & получим число w3 = w1 & w2. Результат действия оператора & можно представить следующим образом:

Поразрядная операция И (&)

w1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 (25)

w2 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 (77)

w3 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 (9)

 

В результате поразрядной операции "&" над двумя числами (25 и 77 в двоичном представлении), которые имеют, например, 16 бит, получили новое число, т.е. 9.

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

w3 = w1 & 3;

 

переменной w3 присваивается значение переменной w1, для которой выполнена поразрядная операция & со значением 3. При этом все биты левее двух младших битов устанавливаются в 0, а остальные биты сохраняют свое значение [16.2]. Маска представляет собой некоторую комбинацию разрядов [16.1]. Разряды маски с нулевыми значениями можно считать аналогом непрозрачных ячеек реальной маски, а разряды со значениями 1 – прозрачными ячейками.

Поразрядная операция & называется также конъюнкцией, или логическим умножением. Применяется часто обозначение AND.

Поразрядная операция ИЛИ обозначается символом |.

Когда над двумя значениями производится операция поразрядно ИЛИ, то последовательно сравниваются значения всех битов при двоичном представлении этих значений [5]. Если при этом соответствующий бит имеет значение 1 в первом или втором операнде, то результирующее значение будет равно 1. Рассмотрим предыдущий пример с поразрядной операции ИЛИ:

Поразрядная операция ИЛИ (|)

w1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 (25)

w2 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 (77)

w3 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 1 (93)

 

Поразрядную операцию ИЛИ (|) обычно используют для установки заданных битов слова в 1. Логическую операцию ИЛИ называют также включающей дизъюнкцией, или логическим сложением. Часто применяется обозначение OR.

Поразрядная операция исключающего ИЛИ (^) работает следующим образом [5]. Сравниваются соответствующие биты двух операндов, и если только один из битов равен 1, то результат будет равен 1. А при равенстве обоих соответствующих битов или 0, или 1 результат будет равен 0. Для двух операндов b1, b2 при использовании исключающего ИЛИ (^) справедлива таблица истинности (табл. 3).

Таблица 3. Таблица истинности операции исключающего ИЛИ (^)

b1 b2 b1 ^ b2

0 0 0

0 1 1

1 0 1

1 1 0

 

Если операцию исключающего ИЛИ (^) использовать для одного и того же значения, то в результате будет получено нулевое значение. Этот прием часто использовался программистами на языке ассемблера как наиболее быстрый путь установить значение в нуль или сравнить два значения на их равенство. Этот способ не рекомендуется использовать в языке программирования С, так как при этом скорость работы не повышается, а программа становится менее понятной [2].

Операция исключающего ИЛИ (^) может применяться для перестановки значений двух переменных без выделения дополнительной памяти (и, соответственно, без использования дополнительной переменной).

Поразрядная операция исключающего "ИЛИ" называется также исключающей дизъюнкцией. Часто применяется обозначение XOR.

 

  1. Поразрядные операции сдвига

 

Оператор сдвига влево: <<

Когда оператор сдвига влево (<<) выполняется над некоторым значением, все биты, составляющие это значение, сдвигаются влево [2]. Связанное с этим оператором число показывает количество бит, на которое значение должно переместиться. Биты, которые сдвигаются со старшего разряда, считаются потерянными, а на место младших битов всегда помещаются нули.

Оператор сдвига вправо: >>

Операция сдвига вправо (>>) сдвигает разряды левого операнда вправо на количество позиций, указываемое правым операндом. Выходящие за правую границу разряды теряются. Для типов данных без знака (unsigned) освобождаемые слева позиции заполняются нулями. Для знаковых типов данных результат зависит от используемой системы. Освобождаемые позиции могут заполняться нулями либо копиями знакового (первого слева) разряда [1].

Поразрядные операции сдвига могут служить удобным и эффективным (в зависимости) средством выполнения операций умножения и деления на числа, представляющие собой степени двойки [1]. Такие операции аналогичны смещению десятичной точки при умножении или делении на 10.

 

 

  1. Индивидуальные задания

 

1. Напишите программу по демонстрации операции поразрядного отрицания (поразрядного дополнения) числа без знака, вводимого с клавиатуры, с использованием операций побитового сдвига. Возможный результат выполнения программы показан на рис. 1

рис. 1

2. Напишите программу выполнения поразрядной операции И (&) над двумя целыми числами, представленными в двоичной системе счисления для 32-разрядного компьютера. Возможный результат выполнения программы показан на рис. 2

рис. 2

 

3. Напишите программу демонстрацию поразрядной операции "ИЛИ" (включающей дизъюнкции). Возможный результат выполнения программы показан на рис. 3

рис. 3

4. Напишите программу демонстрацию поразрядного исключающего ИЛИ (^). Возможный результат выполнения программы показан на рис. 4

рис. 4

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

рис. 5

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

рис. 6

7. Напишите программу по решению следующего примера. С клавиатуры вводятся два целых числа. Остатки от деления их на 16 заносятся соответственно в 4 младших и 4 старших разряда одного байта. Затем следует напечатать изображение содержимого сформированного байта. Возможный результат выполнения программы показан на рис. 7

рис. 7

 

8. Используя битовые поля структуры, напишите программу вывода на экран дисплея двоичного кода ASCII символа, вводимого с клавиатуры. Возможный результат выполнения программы показан на рис. 8

 

рис. 8

 

9. Напишите программу левого поразрядного сдвига для вводимого с клавиатуры целого числа с выводом его двоичного эквивалента и с повторными сдвигами влево. Возможный результат выполнения программы показан на рис. 9

рис. 9


Дата добавления: 2015-08-09; просмотров: 114 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Команда Документы| Теоретическая часть.

mybiblioteka.su - 2015-2024 год. (0.01 сек.)