Логические операции
Используются для проверки условия, вырабатывая значение истина или ложь.
1) && "И"(операция логического умножения.)
Выражение истинно только в том случае, если истинны выражения, стоящие до и после &&. Если первое – ложь, то дальше не проверяется. (12)
2) || "ИЛИ" (логическое сложение.)
Выражение истинно, если одно из выражений истинно. Если первое – истина, дальше не проверяется (13)
3) ! "НЕ" (отрицание) (2)
Булева логика:
x | y | && | || | ! |
0 11 | ||||
Примеры:
if(x>0 && x<10) действие
5>2 && 4>7 - ложь
5>2 || 4>7 - истина
!(4>7) – истина
У операции ! (НЕ) очень высокий приоритет (выше только у скобок). && и || выше присваивания, но ниже чем отношения.
a>b && b>c || b>d
((a>b) && (b>c) || (b>d))
Операции с разрядами
Поразрядные логические операции. Приводят к изменению значения переменной. Действия производятся над данными класса целых и char. Они называются поразрядными, потому что они выполняются отдельно над каждым разрядом независимо от разряда, находящегося слева или справа.
1) ~ Дополнение до 1 или поразрядное отрицание. Это унарная операция изменяет каждую 1 на 0, а 0 на 1.
~(11010) получим (00101)
2) & Поразрядное Ислужит для сбрасывания битов. Эта бинарная операция сравнивает последовательно разряд за разрядом два операнда. Результат равен 1, если оба соответствующих разряда операндов равны 1
(10010011) & (00111101) => (00010001)
3) | Поразрядное ИЛИ служит для установки битов. Эта бинарная операция сравнивает последовательно разряд за разрядом два операнда. Результат равен 1, если один (или оба) из соответствующих разряда операндов равен 1.
(10010011) | (00111101) => (10111111)
4) ^ Исключающее ИЛИ. Результат равен 1, если один из разрядов равен 1 (но не оба)
(10010011) ^ (00111101) => (10101110)
Операции сдвига
Операции сдвига осуществляют поразрядный сдвиг операнда. Величина сдвига определяется значением правого операнда. Сдвигаемые разряды теряются. При сдвиге вправо знаковый разряд размножается.
1) << сдвиг влево Разряды левого операнда сдвигаются влево на число позиций, указанное правым операндом. Освобождающиеся позиции заполняются нулями, а разряды, сдвигаемые за левый предел левого операнда, теряются.
(10001010)<<2 = = 00101000
2) >> сдвиг вправо Разряды левого операнда сдвигаются вправо на число позиций, указанное правым операндом. Разряды, сдвигаемые за правый предел левого операнда, теряются. Для беззнаковых чисел освобожденные слева разряды заполняются нулями. Для чисел со знаком левый разряд принимает значение знака.
(10001010)>>2 = = 00100010
Эти операции выполняют эффективное умножение и деление на степени 2:
number<<n – умножает number на 2 в n-й степени
number>>n – делит number на 2 в n-й степени
6.6. Операция условия ?:
Операция состоит из двух частей (? и :) и содержит три операнда (операнд1 ? операнд2 : операнд 3). Это более короткий способ записи оператора if else и называется «условным выражением».
Например: условное выражение x = (y<0)? –y : y; означает, что если у меньше 0, то х = -у, в противном случае х = у. В терминах оператора if else это выглядело бы так:
if(y<0)
x = -y;
else
x = y;
Условные выражения более компактны и приводят к получению более компактного машинного кода.
Т.о. если условие операнда 1 истинно, то значением условного выражения является величина операнда 2, если условие операнда 1 ложно – величина операнда 2.
Условное выражение удобно использовать, когда имеется некоторая переменная, которой можно присвоить одно из двух возможных значений.
max = (а>b) ? a : b;
Дата добавления: 2018-11-25; просмотров: 466;