Логические операторы
Операторы сдвига
Побитовые логические операторы
Побитовые операторы
Оператор побитового отрицания НЕ (~) инвертирует значения всех битов числа, как показано ниже:
Значение бита операнда | ||
Значение бита результата |
Этот оператор часто применяется при инвертировании битовых карт.
Оператор побитового И (&) сравнивает каждый бит первого операнда с соответствующим битом второго операнда. Если оба сравниваемых бита - единицы, то соответствующий бит результата устанавливается в 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)