Логические операторы

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

Побитовые логические операторы

Побитовые операторы

Оператор побитового отрицания НЕ (~) инвертирует значения всех битов числа, как показано ниже:

 

Значение бита операнда
Значение бита результата

 

Этот оператор часто применяется при инвертировании битовых карт.

 

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

 

Значение бита операнда 1
Значение бита операнда 2
Значение бита результата

 

Этот оператор часто применяется для маскирования отдельных битов чисел.

 

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

 

Значение бита операнда 1
Значение бита операнда 2
Значение бита результата

 

Этот оператор часто применяют для установки отдельных битов чисел.

 

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

 

 

Значение бита операнда 1
Значение бита операнда 2
Значение бита результата

 

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

Ниже приводятся примеры инструкций с побитовыми операторами:

short int i, j, r; i=0x45FF; // i = 0100 0101 1111 1111 j=0x00FF; // j = 0000 0000 1111 1111 // ----------------------------r = i ^ j; // r = 0100 0101 0000 0000 = 0x4500r = i | j; // r = 0100 0101 1111 1111 = 0x45FF r = i & j; // r = 0000 0000 1111 1111 = 0x00FFr = ~ j; // r = 1111 1111 0000 0000 = 0xFF00

Примеры:

 

short int i = 0x1234, j, k;k = i << 4 ; // k = 0x2340j = i << 8 ; // j = 0x3400 i = j >> 8 ; // i = 0x0034

Оператор логического отрицания НЕ (!) инвертирует значение своего операнда:

 

Значение операнда false true
Значение результата true false

 

Операция логического И (&&) вырабатывает значение true, если только оба операнда имеют значение true:

 

Значение операнда 1 false false true true
Значение операнда 2 false true false true
Значение результата false false false true

 

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

 

Значение операнда 1 false false true true
Значение операнда 2 false true false true
Значение результата false true true true

 

Например:

bool sign1, sign2;

sign1 = !(salary < 20000.00) && (age <= 21);

sign2 = (cost > 50.00) || (stock_price >= 30.0)