Лекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)
Скачать 319.62 Kb.
|
битовое отрицание (одноместная), |
op1 | op2 | op1 | op1 & op2 | op1 ^ op2 | op1 | op2 |
0 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 | 1 | 1 |
1 | 1 | 0 | 1 | 0 | 1 |
Рассмотрим несколько примеров.
Первый пример показывает, как с помощью операции | можно установить в единицу выбранные биты операнда:
/* a = 00001001 = 9 */
char a, b; /* 00011010 = 26 */
a = 9; /* -------- */
b = a | 26 /* b = 31 */ /* b = 00011011 = 31 */
Следующий пример показывает, как с помощью операции & можно обнулить старшую часть байта:
char a, b; /* a = 00101101 = 45 */
a = 45; /* 00001111 */
b = a & 0x0F; /* -------- */
/* b = 00001101 = 13 */
К битовым операциям относятся операции сдвига << и >> :
a << b сдвиг битов переменной a влево на b позиций,
a >> b сдвиг битов переменной a вправо на b позиций.
Например:
char a, b;
a = 26; /* a = 00011010 = 26 */
b = a << 2; /* b = 01101000 = 104 */
Сдвиг влево равносилен умножению на 2 в соответствующей степени. Сдвиг вправо - делению на 2 в соответствующей степени.
Все битовые операции выполняются слева направо. В следующей строке приведены битовые операции в порядке уменьшения их приоритета.
, << >>, &, ^, |
Для двуместных битовых операций определены дополнительные операции присваивания:
a <<= b; эквивалентно a = a << b,
a >>= b; эквивалентно a = a >> b,
a &= b; эквивалентно a = a & b,
a ^= b; эквивалентно a = a ^ b,
a |= b; эквивалентно a = a | b.
Операции отношения
Представляют собой двуместные операции, предназначенные для сравнения операндов. В языке Си имеются шесть операций отношения:
> больше,
< меньше,
>= больше или равно,
<= меньше или равно,
== равно,
!= не равно.
Действие операций отношения заключается в сравнении первого и второго операнда. Если операнды не удовлетворяют условию отношения, то результат операции равен нулю, т.е. условие ложно. Если операнды удовлетворяют условию отношения, то результат отношения не равен нулю, т.е. условие истинно.
Например:
int a,b;
a = 5;
b = ( a + 5 <= 4 ); /* b = 0 */
Из сказанного выше следует, что в языке Cи отсутствует специальный логический тип данных. Его заменяет целый тип, причем логическому понятию "ложно" соответствует значение 0, а логическому понятию "истина" - любое отличное от 0 целое число.
Операции отношения выполняются слева направо. При нечетком понимании их действия возможно получение, вообще говоря, неверного результата. Например, с точки зрения синтаксиса языка Си выражение a
Чтобы это выражение соответствовало математическому смыслу, его нужно разбить на две части a < x и x < b и связать его логической операцией && ("и"), т.е. (a < x) && (x < b). Такая запись читается так : если a меньше x и x меньше b, то результат - истина.