Поразрядное включающие или (|)
Данный оператор берет из одинаковых разрядов левого и правого операнда значения и если одно из значений равно 1 то в результате будет 1. Его так же легко запомнить так: Если единица там ИЛИ единица тут то единица. Таким образом чтобы получить единицу, данному оператору достаточно что бы она была хотя бы у одного операнда в промеряемом разряде.
Операция: 0101 | 0011 |
Разряд 4 |
Разряд 3 |
Разряд 2 |
Разряд 1 |
Левый операнд |
0 |
1 |
0 |
1 |
Правый операнд |
0 |
0 |
1 |
1 |
Результат |
0 |
1 |
1 |
1 |
Как видно из таблицы, данный оператор устанавливает 1 в результат в тех случаях если хотя бы в одном операнде была 1. И так результатом применения операции 0101 | 0011 будет 0111.
Поразрядное исключающие ИЛИ (^)
Данный оператор берет из одинаковых разрядов левого и правого операнда значения и если эти значения одинаковые то в результате будет 0, а если значения разные то 1.
Операция: 0101 ^ 0011 |
Разряд 4 |
Разряд 3 |
Разряд 2 |
Разряд 1 |
Левый операнд |
0 |
1 |
0 |
1 |
Правый операнд |
0 |
0 |
1 |
1 |
Результат |
0 |
1 |
1 |
0 |
Как видно из таблицы, данный оператор устанавливает 1 в результат в тех случаях где значения операндов в определенном разряде разные и 0 там где они совпадают. И так результатом применения операции 0101 ^ 0011 будет 0110.
Одноместное поразрядное дополнение до единицы (~)
Данный оператор унарен, то есть он имеет лишь один операнд. Данный оператор просто инвертирует значения всех битов своего операнда на противоположные, 1 станет 0 и наоборот.
Операция: ~0101 |
Разряд 4 |
Разряд 3 |
Разряд 2 |
Разряд 1 |
Операнд |
0 |
1 |
0 |
1 |
Результат |
1 |
0 |
1 |
0 |
Как видно из таблицы, данный оператор устанавливает 1 в результат в тех случаях где в операнде был 0 и наоборот. И так результатом применения операции ~0101 будет 1010.
Сдвиг влево (‹‹)
Задача данного оператора cдвинуть биты своего операнда на какое-то количество влево, начиная с младшего правого бита. Пустые места после сдвига заполняются нулями. Если размера числа будет недостаточно чтобы сохранить сдвинутые биты в левую сторону, они будут утеряны.
И так посмотрим что же будет происходить. Мы собираемся взять число 0101 и сдвинуть его влево на 2 разряда.
Шаг 1: Операnор перемещает все значения на один разряд влево и получается следующие (0)101Х В скобочках число которое вышло за пределы ячейки отведенной для нашего 4 битного значения и было утеряно, а Х вакантное место и это вакантное место оператор заполнит нулем и получится: (0)101[0] И так мы видим, в круглых скобках что вышло и утеряно а в квадратных то что оператор вставил.
Шаг2: На момент шага два мы имеем число 1010. Оператор производит второй сдвиг и мы получаем вот такую ситуацию (01)010X Как мы видим единица теперь оказалась в круглых скобках и ушла в никуда и опять образовалась вакансия в правой стороне, оператор в очередной раз радостно заполнит ее нулем и получим в итоге: (01)01[00]
В круглых скобках та часть исходного числа что была утеряна так как вышла за пределы нашей 4-х битной ячейки а в квадратных скобках то что добавил оператор.
Операция : 0101 ‹‹ 2 |
Разряд 4 |
Разряд 3 |
Разряд 2 |
Разряд 1 |
Операнд |
0 |
1 |
0 |
1 |
Результат |
0 |
1 |
0 |
0 |
Как видно из таблицы, все биты сместились в лево на 2 позиции, и как вы можете заметить мы потеряли одну единицу, так как в нашем примере наши числа имеют длину лишь 4 бита. И так в результате применения операции 0101 ‹‹ 2 будет 0100.
