Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по программированию и алгоритмизаци...doc
Скачиваний:
31
Добавлен:
05.09.2019
Размер:
2.24 Mб
Скачать

Операции сравнения

<,<=,>,>=,==,!= Меньше, меньше равно, больше,

больше равно, равно, не равно

Операции сравнения определены на множестве операндов арифметического типа. Допускается также сравнение значений адресов в памяти ЭВМ. Следующая таблица демонстрирует зависимость результата сравнения от значений операндов Vaℓ1 и Vaℓ2. Результат сравнения всегда целочисленный и может принимать одно из двух значений: 0 и 1. При этом 0 означает ложь, а 1 - истину.

Операция

1, если

0, если

<

Vaℓ1 меньше Vaℓ2

Vaℓ1 больше или равно Vaℓ2

<=

Vaℓ1 меньше или равно Vaℓ2

Vaℓ1 больше Vaℓ2

>

Vaℓ1 больше Vaℓ2

Vaℓ1 меньше или равно Vaℓ2

>=

Vaℓ1 больше или равно Vaℓ2

Vaℓ1 меньше Vaℓ2

==

Vaℓ1 равно Vaℓ2

Vaℓ1 не равно Vaℓ2

!=

Vaℓ1 не равно Vaℓ2

Vaℓ1 равно Vaℓ2

Логические бинарные операции

&&,|| И, ИЛИ

Логические бинарные операции объединяют выражения сравнения со значениями истина (!=0) и ложь (==0). Результат операций приведён в следующей таблице

Первый операнд

Второй операнд

&&

||

Истина

Истина

1

1

Истина

Ложь

0

1

Ложь

Истина

0

1

Ложь

Ложь

0

0

Операция присваивания

= Простая форма операции присваивания

Левый операнд операции присваивания является леводопустимым выражением.

В качестве правого операнда операции присваивания может выступать любое выражение. Значение правого операнда присваивается левому операнду. Значение выражения оказывается равным значению правого операнда. Не существует никаких ограничений на структуру этого операнда. Правый операнд может состоять из множества выражений, соединенных операциями присвоения:

An=…=A3=A2=A1;

где A1, A2, A3, …, An являются выражениями. Для определения значений выражений подобной структуры в C++ существуют правила группирования операндов выражений сложной структуры (эти правила подробно будут описаны ниже). В соответствии с одним из этих правил операнды операции присвоения группируются справа налево:

An = (An-1=…=(A3=(A2=A1))…);

Очевидно, что в таком выражении все операнды, кроме самого правого, должны быть модифицируемыми 1-ми выражениями. В результате выполнения этого выражения операндам An, An-1, … A3, A2 будет присвоено значение операнда A1.

Специальные формы операций присваивания

В процессе трансляции выражений на этапе генерации кода транслятор строит последовательности машинных кодов, реализующие закодированные в выражениях действия. Например, при трансляции выражения А=А+125 транслятор, прежде всего, генерирует код для вычисления значения выражения A + 125 и присвоения результата переменной A. При этом фрагмент кода, вычисляющий адрес переменной A, дважды войдёт во множество команд процессора, реализующих это выражение.

В целях упрощения структуры подобных операторов в C++ применяются комбинированные (или сокращённые) формы операторов присваивания. Для приведенного выше примера А+=125. Присвоение левому операнду произведение значений левого и правого операндов.

*= Операция присвоения произведения. Например, A *= B.

/= Операция присвоения частного от деления. Например, A /= B + 254

%= Операция присвоения остатка от деления. Например, A %= B

+= Операция присвоения суммы. Например, A += B

-= Операция присвоения разности. Например, A -= B

<<= Операция присвоения результата операции побитового сдвига влево на количество бит, равное значению правого целочисленного операнда. Например, A <<= B.

>>= Операция присвоения результата операции побитового сдвига вправо на количество бит, равное значению правого целочисленного операнда. Например, A <<= B.

&= Операция присвоения результата поразрядной конъюнкции битовых представлений значений целочисленных операндов. Например, A &= B.

|= Операция присвоения результата поразрядной дизъюнкции битовых представлений значений целочисленных операндов. Например, A |= B.

^= Операция присвоения результата поразрядной исключающей дизъюнкции битовых представлений значений целочисленных операндов. Например, A ^= B.

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