Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PYaVU_s.doc
Скачиваний:
44
Добавлен:
24.02.2016
Размер:
665.09 Кб
Скачать
      1. Побитовые операции

Побитовые операции выполняют побитовое И (&), включающее ИЛИ (|) и исключающее ИЛИ (^). Операнды побитовых операций должны быть целого типа, но их типы могут быть отличными. Обычные арифметические преобразования выполняются. Тип результата определяется типом операндов после преобразования.

Побитовое И (&)

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

Побитовое включающее ИЛИ "|"

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

Побитовое исключающее ИЛИ "^"

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

Примеры

short i = 0xab00;

short j = 0xabcd;

short n;

n = i&j; /* example 1 */

n = i|j; /* example 2 */

n = i^j; /* example 3 */

В первом примере n присвоится результат равный значению i (шестнадцатеричное AB00). Во втором примере результатом побитовой операции включающего ИЛИ будет величина ABCD (шестнадцатеричная), в то время как в третьем примере результатом исключающего ИЛИ будет значение CD (шестнадцатеричное).

      1. Логические операции

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

Логические операции не выполняют стандартные арифметические преобразования. Вместо этого они вычисляют каждый операнд с точки зрения его эквивалентности нулю. Указатель имеет значение 0, если это значение явно установлено путем присваивания или инициализации. Результатом логической операции является 0 или 1. Тип результата есть int.

Логическое И (&&)

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

Логическое ИЛИ (||)

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

Примеры

int x,y;

if (x < y && y < z) /* example 1 */

printf ("x is less than z/n");

if (x = = y || x = = z) /* example 2 */

printf ("x is equal to either y or z/n");

В первом примере вызывается функция printf для печати сообщения, если x меньше чем y и y меньше чем z. Если x больше чем y, то второй операнд (y<z) не вычисляется и печати не происходит. Заметим, что это вычисление могло бы вызвать проблемы в случае, когда второй операнд содержит побочный эффект.

Во втором примере печатается сообщение, если x равен y или z. Если x равен y то второй операнд не вычисляется.