2.4. Объявление констант
В С++ введена концепция определяемых пользователем констант для указания на то, что значение нельзя изменить непосредственно. Это может быть полезно в нескольких отношениях. Например, многие объекты не меняются после инициализации; использование символических констант приводит к более удобному в сопровождении коду, чем применение литералов непосредственно в тексте программы; указатели часто используются только для чтения, но не для записи и т.д.
Чтобы объявить объект константой, в объявление нужно добавить ключевое слово const. Так как константе нельзя присваивать значения, она должна быть инициализирована.
const <тип> <имя>=<значение>;
Пример:
const int A = 100;
const int B[] = {1, 2, 3, 4, 5};
Const модифицирует тип, т.е. ограничивает возможное использование объекта, но не указывает способ размещения константного объекта. Простым и типичным использованием константы является тот случай, когда значение константы известно во время компиляции и под неё не требуется выделение памяти. Для массива констант, как правило, требуется выделение памяти, так как, в общем случае, компилятор не в состоянии определить, к какому элементу массива происходит обращение в выражении.
В качестве имен констант используются произвольно выбираемые идентификаторы. Традиционно принято для имен констант использовать прописные буквы и символ подчеркивания. Такое соглашение позволяет при просмотре большого текста программы на языке С легко отличать имена переменных от названий констант.
Также можно использовать перечислимые константы, определяемые через ключевое слово enum. Такой способ позволяет именовать только целые константы.
2.5. Операции, выражения и операторы
Понятие выражения, как и понятие переменной, заимствовано из алгебры. Выражение - это группа символов, представляющее некоторое значение. Оно может содержать числа, символы для математических действий, такие как сложение или деление, и даже имена переменных. Например, выражение
(4 х 5) - 4 представляет значение 16.
Почленная интерпретация этого выражения - "взять число 4, умножить его на 5, из результата вычесть 4".
В языке С существует три типа выражений:
- математическое выражение, дающее численный результат;
- текстовое выражение, дающее строку символов;
- логическое выражение, дающее в результате 1 или 0 (интерпретируемые как "истина" или "ложь".
В зависимости от количества операндов различают унарные (один операнд), бинарные (два операнда) и тренарные (три операнда).
Унарные операции:
Операция |
Описание |
Пример |
& |
Получение адреса операнда |
int MyVal = 1024; int *pint; pint = &MyVal; *pint = *pint + 1; cout << MyVal; |
* |
Обращение по адресу к значению (разыменование) |
|
- |
Унарный минус – изменение знака арифметического операнда |
Изменение знака арифметического операнда |
+ |
Унарный плюс |
Введен для симметрии с унарным минусом |
~ |
Поразрядное инвертирование внутреннего двоичного кода |
unsigned short i; (0 ... 65 535); i=10; i=~i; cout << i; |
! |
Логическое отрицание значения операнда |
|
++ |
Инкремент (префиксный или постфиксный) |
|
-- |
Декремент (префиксный или постфиксный) |
|
sizeof |
Вычисление размера в байтах |
|
:: |
Операция доступа |
|
Бинарные операции:
Операция |
Описание операции |
Арифметические операции |
|
+ |
Сложение |
- |
Вычитание |
* |
Умножение |
/ |
Деление |
% |
Получение остатка от деления целочисленных операндов |
Операции отношения (сравнения) |
|
< |
Меньше |
> |
Больше |
<= |
Меньше или равно |
>= |
Больше или равно |
= = |
Равно |
!= |
Не равно |
Логические бинарные операции |
|
&& |
Конъюнкция (И) |
| | |
Дизъюнкция (ИЛИ) |
Операции присваивания |
|
= |
Простое присваивание |
*= |
Присваивание произведения значений операндов |
/= |
Присваивание частного от деления значений операндов |
%= |
Присваивание остатка от деления значений операндов |
+= |
Присваивание суммы значений операндов |
-= |
Присваивание разности значений операндов |
Операции сдвига |
|
<< |
Левый сдвиг |
>> |
Правый сдвиг |
Поразрядные операции |
|
& |
Поразрядная конъюнкция битовых представлений значений целочисленных операндов |
| |
Поразрядная дизъюнкция -//- |
^ |
Поразрядная исключающая дизъюнкция -//- |
Деление целых чисел дает в результате целое число. Дробная часть результата, если она есть, отбрасывается:
int MyVal1 = 21 / 6;
int MyVal2 = 21 / 7;
И MyVal1, и MyVal2 в итоге получат значение 3.
Один нюанс, который вы должны запомнить.
float res;
res = 5/4;
Результат: res = 1.
Для того, чтобы посчитать "правильно", этот фрагмент программы должен быть
float res;
res = 5./4.;
Результат: res = 1.25.
Результат получения остатка от деления целочисленных операндов положителен, если оба операнда положительны. Если же один или оба операнда отрицательны, результат зависит от реализации, то есть машинно-зависим.
Значением операции сдвига является битовое представление левого операнда, сдвинутое влево (<<) или вправо (>>) на количество разрядов, равное значению правого операнда.
При левом сдвиге на i разрядов первые i разрядов левого операнда теряются, последние i разрядов левого операнда заполняются нулями.
При правом сдвиге на i разрядов первые i разрядов левого операнда заполняются нулями, если левый операнд имеет беззнаковый тип или имеет неотрицательное значение, в противном случае значение определяется реализацией. Последние i разрядов левого операнда теряются.
