Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебно-практическое пособие ПРОГ.doc
Скачиваний:
37
Добавлен:
20.11.2019
Размер:
5.63 Mб
Скачать

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

В Си используются следующие логические операции:

  • || логическое "или" (логическое сложение)

  • && логическое "и" (логическое умножение)

  • ! логическое "не" (логическое отрицание)

Примеры логических выражений:

int a, b, c, d ,x, y;

a = b || c; // логическое "или"

d = b && c; // логическое "и"

a = !b; // логическое "не"

a = (x == y); // сравнение в правой части

c = (x > 0) && (y != 1); // c истинно, когда оба сравнения истинны

Самый высокий приоритет у операции логического отрицания, затем следует логическое умножение, самый низкий приоритет у логического сложения.

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

Кроме обычных логических операций, в Си имеются побитовые логические операции, которые выполняются независимо для каждого отдельного бита операндов. Определены следующие побитовые логические операции:

  • & побитовое логическое умножение ("и")

  • | побитовое логическое сложение ("или")

  • ~ побитовое логическое отрицание ("не")

  • ^ побитовое сложение по модулю 2 (исключающее "или")

Приоритеты побитовых операций в Си такие же, как у соответствующих логических операций.

3.3.7.Операции сдвига

Операции сдвига применяются к целочисленным переменным: двоичный код числа сдвигается вправо или влево на указанное количество позиций. Сдвиг вправо обозначается двумя символами "больше" >>, сдвиг влево - двумя символами "меньше" <<.

При сдвиге влево на k позиций младшие k разрядов результата устанавливаются в ноль. Сдвиг влево на k позиций эквивалентен умножению на число 2k.

Сдвиг вправо по-разному определяется для беззнаковых и знаковых чисел. При сдвиге вправо беззнакового числа на k позиций освободившиеся k старших разрядов устанавливаются в ноль.

При сдвиге вправо чисел со знаком происходит так называемое "расширение знакового разряда". Если число неотрицательно, т.е. старший, или знаковый, разряд числа равен нулю, то происходит обычный сдвиг, как и в случае беззнаковых чисел. Если же число отрицательное, т.е. его старший разряд равен единице, то освободившиеся в результате сдвига k старших разрядов устанавливаются в единицу. Число, таким образом, остается отрицательным.

Сдвиг вправо на k позиций соответствует целочисленному делению на число 2k. При k = 1 это соответствует делению на 2 только для отрицательных чисел, не равных -1. Для числа -1, все биты двоичного кода которого равны единице, сдвиг вправо не приводит к его изменению.

3.3.8.Операции "увеличить на", "домножить на" и т.П.

В большинстве алгоритмов при выполнении операции сложения чаще всего переменная-результат операции совпадает с первым аргументом:

x = x + y;

Здесь складываются значения двух переменных x и y, результат помещается в первую переменную x. Таким образом, значение переменной x увеличивается на значение y.

В Си существует сокращенная запись операции увеличения:

s += y;

Оператор += читается как "увеличить на".

Подобные операторы существуют для любых операций, допустимой в Си. Например, для арифметических операций +, -, *, /, % можно использовать операции

+= увеличить на

-= уменьшить на

*= домножить на

/= поделить на

%= поделить с остатком на

Для логических операций можно использовать операторы &&= и ||=.