Условные логические операции чаще всего используются в операциях проверки условия if и могут выполняться над любыми объектами. Результат условной логической операции:
§ 1 если выражение истинно;
§ 0 если выражение ложно.
Вообще, все значения, отличные от нуля, интерпретируются условными логическими операциями как истинные.
Основные условные логические операции:
§ && - И (бинарная) — требуется одновременное выполнение всех операций отношения;
§ || - ИЛИ (бинарная) — требуется выполнение хотя бы одной операции отношения;
§ ! - НЕ (унарная) — требуется невыполнение операции отношения.
Побитовые логические операции оперируют с битами, каждый из которых может принимать только два значения: 0 или 1.
Основные побитовые логические операции в языке Си:
§ & конъюнкция (логическое И) - бинарная операция, результат которой равен 1 только когда оба операнда единичны (в общем случае - когда все операнды единичны);
§ | дизъюнкция (логическое ИЛИ) - бинарная операция, результат которой равен 1 когда хотя бы один из операндов равен 1;
§ ~ инверсия (логическое НЕ) - унарная операция, результат которой равен 0 если операнд единичный, и равен 1, если операнд нулевой;
§ ^ исключающее ИЛИ - бинарная операция, результат которой равен 1, если только один из двух операндов равен 1 (в общем случае если во входном наборе операндов нечетное число единиц).
Для каждого бита результат выполнения операции будет получен в соответствии с таблицей.
a
b
a & b
a | b
~a
a ^ b
Пример:
unsigned char a = 14; // a = 0000 1110 unsigned char b = 9; // b = 0000 1001 unsigned char c, d, e, f; c = a & b; // c = 8 = 0000 1000 d = a | b; // d = 15 = 0000 1111 e = ~a; // e = 241 = 1111 0001 f = a ^ b; // f = 7 = 0000 0111
Побитовые операции позволяют осуществлять установку и сброс отдельных битов числа. С этой целью используется маскирование битов. Маски, соответствующие установке каждого бита в байте, представлены в таблице
Бит
Маска
0x01
0x02
0x04
0x08
0x10
0x20
0x40
0x80
Для установки определенного бита необходимо соответствующий бит маски установить в 1 и произвести операцию побитового логического ИЛИ с константой, представляющей собой маску:
unsigned char a = 3; a = a | 0x04; // a = 7, бит 2 установлен
Для сброса определенного бита необходимо соответствующий бит маски сбросить в 0 и произвести операцию побитового логического И с константой, представляющей собой маску:
unsigned char a = 3; a = a & (~0x02); // a = 1, бит 1 сброшен
Бинарные побитовые логические операции могут быть объединены с операцией присваивания:
§ объект &= выражение; // объект = объект & выражение
§ объект |= выражение; // объект = объект | выражение
§ объект ^= выражение; // объект = объект ^ выражение