
- •1. Введение
- •2. Элементы языка
- •2.1. Первые программы
- •2.2. Алфавит языка
- •2.3. Комментарии
- •2.4. Типы данных
- •2.5. Целые типы данных
- •2.6. Плавающие типы данных
- •2.7. Константы-строки, или литералы
- •2.8. Директива препроцессора define
- •2.9. Описания
- •2.10. Модификатор const
- •3. Выражения
- •3.1. Операция и выражение присваивания
- •3.2. Арифметические операции
- •3.3. Операции отношения
- •3.4. Логические операции
- •3.5. Побитовые операции
- •3.6. Сдвиги
- •?????3.8. Тернарная или условная операция
- •3.9. Операция следования
- •3.10. Приоритеты операций и порядок вычисления
- •4.6. Оператор выбора switch
- •4.7. Оператор цикла while
- •4.8. Цикл с постусловием do-while
- •4.9. Оператор for
- •4.10. Оператор безусловного перехода
- •4.11. Оператор break
- •4.12. Оператор continue
- •4.13. Оператор return
- •5. Указатели
- •5.1. Определение указателей
- •5.2. Указатели и массивы
- •5.3. Адресная арифметика
- •5.4. Символьные массивы и строки
- •5.5. Многомерные массивы
- •5.6. Указатели и многомерные массивы
- •6. Операция sizeof
- •7. Операции для работы с динамической памятью
- •7.1. Операция выделения памяти new
- •7.2. Операция освобождения памяти delete
- •8. Функции
- •8.1. Определение и вызов функции
- •8.2. Функции. Передача аргументов
- •8.3. Передача многомерных массивов
- •8.4. Указатели на функции
- •8.5. Ссылки
- •8.6. Ссылки в качестве параметров функций
- •8.7. Аргументы по умолчанию
- •8.8. Переопределение функций
- •8.9. Шаблоны функций
- •9. Объявления и определения
- •10. Область существования имени
- •11. Область видимости
- •Здесь будет напечатано
- •12. Классы памяти
- •13. Объявления объектов и типов
- •14. Имена типов
- •15. Синоним имени типа
- •16. Правила преобразования стандартных типов
- •16.1. Явные преобразования
- •16.2. Неявные преобразования стандартных базовых типов
- •16.3. Преобразование производных стандартных типов
- •17. Перечисления
- •18. Классы
- •18.1. Объявление классов
- •18.2. Конструкторы
- •18.3. Деструкторы
- •18.4. Статические члены класса
- •18.5. Указатель this
- •18.6. Статические функции-члены
- •18.7. Указатели на члены класса
- •18.8. Инициализация данных–членов класса
- •18.9. Конструктор копирования и операция присваивания
- •18.10. Дружественные функции
- •18.11. Конструктор и операция new
- •18.12. Вызов деструктора
- •19. Производные классы
- •19.1. Построение производного класса
- •19.2. Защищенные члены класса
- •19.3. Управление уровнем доступа к членам класса
- •19.4. Последовательность вызова конструктора и деструктора при построении производного класса на основе одного базового
- •19.5. Преобразования типов
- •20. Полиморфизм
- •20.1. Раннее и позднее связывание
- •20.2. Виртуальные функции
- •20.3. Абстрактные классы
- •21. Переопределение стандартных операций
- •21.1. Основные определения и свойства
- •21.2. Операции new и delete при работе с абстрактными типами
- •21.3. Использование new при создании динамического объекта абстрактного типа
- •21.4. Операция delete
- •21.5. Преобразование типов
- •22. Некоторые особенности переопределенных операций
- •22.2. Операция [ ]
- •23. Классы и шаблоны
- •24. Списки
- •24.1. Операции над односвязными списками
- •24.2. Двунаправленные и кольцевые списки
- •24.3. Операции над кольцевыми списками
- •25. Стеки
- •25.1. Реализация стека через массив
- •25.2. Реализация стека через динамическую цепочку звеньев
- •26. Двоичные деревья
- •26.1. Определение и построение
- •26.2.Таблицы
- •27. Список литературы
3.2. Арифметические операции
Бинарными арифметическими операциями являются + – * / %.
(Существуют также унарные + и – ).
При делении целых дробная часть отбрасывается.
Так, 10/3 дает 3, в то время как 10/3.0 дает 3.33333...
Операция a % b применяется только к целым операндам и дает остаток от деления a на b, так
10%3 дает 1,
2%3 дает 2,
12%2 дает 0.
3.3. Операции отношения
Операциями отношения являются => > <= <.
Все они имеют одинаковое старшинство. Непосредственно за ними по уровню старшинства следуют операции равенства и неравенства:
= = (равно), != (не равно) с одинаковым старшинством.
Операции отношения младше арифметических операций, так что выражения типа i < lim+3 понимаются как i < (lim+3).
Операция сравнения определяет некоторое выражение. Значение этого выражения равно целой 1, если условие, выраженное сравнением, выполняется и равно 0, если нет.
3.4. Логические операции
К логическим операциям относятся:
унарная операция логическое НЕ, ! (отрицание);
бинарная операция логическое И , && (конъюнкция);
бинарная операция логическое ИЛИ, || (дизъюнкция).
Операнды логических операций могут быть целых, плавающих и некоторых других типов, при этом в каждой операции могут участвовать операнды различных типов.
Операнды логических выражений вычисляются слева направо.
Результатом логической операции является 0 или 1 типа int.
Операция !операнд дает 0, если операнд ненулевой и 1 если операнд равен нулю.
Операция && (И-логическое, логическое умножение) дает значение 1, если оба операнда имеют ненулевое значение. Если один из операндов равен 0, то результат также равен 0. Если значение первого операнда равно 0, то второй операнд не вычисляется.
Операция || (ИЛИ-логическое, логическое сложение) вырабатывает значение 0, если оба операнда равны 0. Если какой-нибудь из операндов имеет ненулевое значение, то результат операции равен 1. Если первый операнд имеет ненулевое значение, то второй операнд не вычисляется.
По приоритету эти операции распределены так: !, &&, ||.
3.5. Побитовые операции
К побитовым, или поразрядным операциям относятся:
операция поразрядного И &;
операция поразрядного ИЛИ |;
операция поразрядного исключающего ИЛИ ^;
унарная операция поразрядного отрицания (дополнение) ~.
Кроме того, рассматриваются операции сдвигов <<, >>.
Операнды поразрядных операций могут быть любого целого типа.
Операция & сравнивает каждый бит первого операнда с соответствующим битом второго операнда. Если оба соответствующих бита единицы, то соответствующий бит результата устанавливается в 1, в противном случае в 0.
Операция | сравнивает каждый бит первого операнда с соответствующим битом второго операнда; если любой из них или оба равны 1, то соответствующий бит результата устанавливается в 1, в противном случае в 0.
Операция ^ . Если один из сравниваемых битов равен 0, а другой равен 1, то соответствующий бит результата устанавливается в 1, в противном случае, т.е. когда оба бита равны 1 или оба равны 0, бит результата устанавливается в 0.
Операция ~ меняет в битовом представлении операнда 0 на 1, а 1 - на 0.
Побитовая операция & часто используется для маскирования некоторого множества битов, например
С=N&0177
передает в С семь младших битов N, полагая остальные равными 0. (С первого нуля в С++ начинаются восьмеричные константы; с 0Х - шестнадцатеричные константы).
Пусть N =642. Приведем побитовое представление N, восьмеричной константы 0177 и результата С:
N |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0177 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
C |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
Операция | используется для включения битов:
С= N|MASK
устанавливает в 1 те биты в N, которые равны 1 в MASK.
Еще примеры:
int a=0x45ff, b=0x00ff;
int c;
c= a ^ b; // c: 0x4500
c= a | b; // c: 0x45ff
c= a & b; // c: 0x00ff
c= ~ a; // c: -0x3a00
c= ~ b; // c: -0x7f00
Этот фрагмент программы можно проиллюстрировать так:
a |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
b |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
c=a^b |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
c=a|b |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
c=a&b |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
c=~b |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
С помощью операции & можно определить остаток от деления операнда типа unsigned int на 2, 4, 8, 16 и т.д. Для этого достаточно применить операцию & к делимому с масками 0x01, 0x03, 0x07, 0x0f, 0x1f и т.д. Например:
7&0x03 дает 3.
Другими словами, выделяются младшие биты числа, а остальные устанавливаются в 0.