- •Программирование и основы алгоритмизации
- •1. Понятие алгоритма
- •1.1. Определение алгоритма
- •1.2. Гост на описание блок-схем
- •1.3. Виды алгоритмов
- •2. Языки программирования
- •2.1. Определение алгоритмического языка
- •2.2. Классификация языков. История развития языков программирования
- •2.3. Выбор языка программирования
- •2.5. Арифметические и логические основы программирования
- •3. Понятие системы программирования
- •3.1. Этапы создания программ
- •3.2. Конструирование программ
- •3.3. Методы, технологии и инструментальные средства производства программных продуктов
- •4.1. Литералы
- •4.2. Встроенные типы данных
- •4.3. Операции
- •Адресные операции
- •Операции преобразования знака
- •Побитовые операции
- •Операция определения размера
- •Операции увеличения и уменьшения значения
- •Операции динамического распределения памяти
- •Операция доступа
- •Аддитивные операции
- •Мультипликативные операции
- •Операции сдвига
- •Поразрядные операции
- •Операции сравнения
- •Логические бинарные операции
- •Операция присваивания
- •Специальные формы операций присваивания
- •Операции выбора компонентов структурированного объекта
- •Операции обращения к компонентам класса
- •Операция управления процессом вычисления значений
- •Операция вызова функции
- •Операция явного преобразования типа
- •Операция индексации
- •4.5. Агрегатные типы данных
- •4.5.1. Массивы
- •4.5.2. Структуры
- •4.5.3. Поля битов
- •4.5.4. Объединения Используются для хранения значений различных типов в одной и той же области памяти, но не одновременно.
- •4.5.5. Перечисления
- •4.5.6. Переименование типов
- •Typedef имя ранее определенного типа имя нового типа1
- •Объявление typedef применяется для создания удобных распознаваемых имен часто встречающихся и для вложенных типов, а также, чтобы сделать программы переносимыми для различных целых типов.
- •4.6. Обработка символьных и строковых переменных
- •4.7. Указатели
- •4.7.1. Инициализация указателей
- •4.7.2. Операции с указателями
- •4.8. Пользовательские процедуры и функции
- •4.8.1. Перегрузка функций
- •4.8.2. Перегрузка операций
- •4.8.3. Шаблоны функций
- •4.8.4. Возврат из функции нескольких значений
- •4.9. Файлы
- •4.10. Директивы препроцессора
- •Библиографический список
Операции сравнения
<,<=,>,>=,==,!= Меньше, меньше равно, больше,
больше равно, равно, не равно
Операции сравнения определены на множестве операндов арифметического типа. Допускается также сравнение значений адресов в памяти ЭВМ. Следующая таблица демонстрирует зависимость результата сравнения от значений операндов 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.
Специальные формы операций присвоения позволяют не только изменять структуру выражений, но и оптимизировать создаваемый транслятором программный код. Фрагмент кода, определяющий адрес левого операнда выражения, встречается в соответствующем множестве команд процессора лишь один раз.