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

Поразрядные операции и сдвиги.

Эти операции применяются к целочисленным данным. При поразрядных операциях каждый бит одного операнда комбинируется (в зависимости от операции) с одноименным битом другого, давая бит результата. При единственной одноместной поразрядной операции — отрицании (~) — биты результата являются инверсией соответствующих битов ее операнда. При сдвиге влево биты первого операнда перемещаются влево (в сторону старших битов) на заданное вторым операндом число позиций. Старшие биты, оказавшиеся за пределами разрядной сетки, теряются; справа результат дополняется нулями. Результат сдвига вправо зависит от того, является ли операнд знаковым или беззнаковым. Биты операнда перемещаются вправо на заданное число позиций. Младшие биты теряются. Если операнд — целое со знаком, производится расширение знакового бита (старшего), т. е. освободившиеся позиции принимают значение 0 в случае положительного числа и 1 — в случае отрицательного. При беззнаковом операнде старшие биты заполняются нулями.

Сдвиг влево эквивалентен умножению на соответствующую степень двойки, сдвиг вправо — делению. Например,

aNumber = aNumber <<4; - умножает aNumber на 16.

Инкремент и декремент

Операции инкремента (++) и декремента (--) соответственно увеличивают или уменьшают свой операнд (обязательно переменную) на единицу. Они изменяют значение самой переменной, т. е. являются скрытыми присваиваниями. Иногда эти операции применяют в качестве самостоятельного оператора:

i++; или ++i; - эквивалентно i = i + 1;

Инкремент и декремент реализуются в 2-х формах: префиксной (++i) и постфиксной (i--). Префиксные операции выполняются перед тем, как будет производиться оценка всего выражения. Все постфиксные операции выполняются уже после оценки выражения, в которое они входят.

b=b1=3; c=c1=5; a=b+c++; /* b=3; c=5+1=6; a=3+5=8; */

a1=b1+(++c1); /* b1=3; c1=5+1=6; a1=3+6=9; */

Условная операция.

Условная операция (? :) позволяет составить условное выражение, т. е. выражение, принимающее различные значения в зависимости от некоторого условия. Эта операция является трехместной. Если ее условие (первый операнд) истинно, оценкой выражения будет второй операнд; если ложно — третий. Классический пример:

max_ab = а > b? а : b;

Запятая

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

Выражение1, выражение2[, ...] - также будет выражением, оценкой которого является значение последнего элемента списка. При этом операция-запятая гарантирует, что оценка выражений в списке будет производиться по порядку слева направо.

i++, j++; - // Значение выражения игнорируется.

res = (j = 4, j += n, j++); - // res присваивается n + 4, j равно n + 5.

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

Лекция 3 Управляющие конструкции с.

Существуют всего три основных структуры потока управления:

  • Последовательная структура — следующим исполняется оператор, расположенный непосредственно после текущего.

  • Структура выбора — имеется несколько операторов; в зависимости от оценки некоторого выражения для исполнения выбирается только один из них, остальные игнорируются.

  • Структура повторения — текущий оператор исполняется снова и снова до тех пор, пока не будет удовлетворено некоторое условие завершения.

Из этих трех структур можно строить сколь угодно сложные управляющие конструкции, поскольку они подчиняются правилу суперпозиции, на место любого оператора некоторой структуры можно в свою очередь подставить любую структуру. При этом иногда последнюю требуется заключить в операторные скобки — в С это фигурные.скобки {}.