Эти операции позволяют выполнять проверку и изменение отдельных битов в данных целого и символьного типов. Их нельзя использовать для вещественных чисел. Действие битовых операций идентично логическим, но они выполняются над каждым битом данных.
Каждая из битовых операций служит определенным целям. Например, операция & (И) полезна для проверки единичных значений отдельных битов числа, а также для установки определенных битов в «0». Операция | (ИЛИ) полезна для установки в «1» битов. Операция ^ (Исключающее ИЛИ) используется для проверки несовпадения битов. Операции сдвига << и >> позволяют сдвинуть все биты числа влево/вправо на заданное количество разрядов. Недостающие значения битов дополняются нулями, информация в исчезающих битах теряется.
Примеры использования битовых операций приведены в табл. 4.3. Все переменные a, b, z этой таблицы типа unsigned char. Язык Си не умеет работать с данными в двоичном формате, но для упрощения понимания работы каждое число представлено в двоичном формате (например, для первой строки a=20210=110010102, b=15510=100110112).
Таблица 4.3.
Операция
1 операнд
2 операнд
Результат
Комментарий
НЕ
a=11001010
b=10011011
z=~a=00110101
z=~b=01100100
Инвертируются все биты числа
И
a=10011010
b=11110000
z=a&b=10010000
На число a накладывается маска (число b) – выделяются значения 4 старших битов числа а, младшие биты обнуляются
ИЛИ
a=10011010
b=00001111
z=a|b=10011111
Четыре младших бита числа a устанавливаются в единичное состояние, старшие биты остаются без изменения
Исключающее ИЛИ
a=10011010
b=00001111
z=a^b=10010101
Старшие биты числа a остаются без изменения, младшие – инвертируются
Сдвиг вправо
a=10011010
b=00001111
z=a<<1=00110100
z=b<<3=01111000
Выполняется сдвиг вправо всех битов числа a на один разряд, числа b – на три разряда. Происходит потеря старших битов, установленных в «1»
Сдвиг влево
a=10011010
b=00001111
z=a>>2=00100110
z=b>>1=00000111
Выполняется сдвиг влево всех битов числа a на два разряда, числа b – на один разряд. Происходит потеря младших битов, установленных в «1»
Следует отметить, что результатом исполнения битовой операции в отличии от логических операций будет число типа символ или целое, а не логические «0» или «1». Так, например, исполнение выражений b=a&&8 и b=a&8 при различных значениях переменной а даст такой результат: