732______ ________________________Часть !1. Программирование на C++
ранда. Отрицания значения True (истинно) есть False (ложно) и наоборот, не False есть True. Она также применяется к значениям указателей, при этом считается, что нулевое значение указателя есть false, а любое ненулевое — true.
Общая форма записи одноместной операции выглядит так:
одноместная_операция операнд
Применим эту форму записи к операции !:
char *p = О;
if( !р) // проверка на истинность
Вы видите, что указатели в C++ можно использовать в условных выражениях. Также в них можно употреблять логические (булевы) значения, целые числа и выражения. То что принимает нулевое значение, интерпретируется как ложное условие, а все, что не ноль, считается истиной. При подстановке вместо р его логического эквивалента "ложь" вышеприведенное выражение принимает вид "если (не ложь)"; не ложно есть истинно.
int а = 5;
if( !а) // условие ложно
Вспоминая, что в условных выражениях ненулевые значения считаются истинными, увидим, что в вышеприведенном выражении "если (не истина)" условие является ложным.
На протяжении этой книги вы постоянно будете сталкиваться с унарными операциями. Так, например, очень часто встречающейся их разновидностью являются префиксный и постфиксный инкремент и декремент (++ и --) целочисленных значений. Например
int num = 10;
num++; // то же, что num = num + 1 или num += 1 --num; // то же, что num = num — 1 или num -= 1
Префиксные операции располагаются слева от операнда и производят действие над ним до того, как его значение будет использовано, а постфиксные операции выполняются после всех вычислений.
Одноместная операция отрицания обозначается тильдой (~) и производит побитовое отрицание (или дополнение) операнда. Дополнение к -1
int а = -1;
а = ~а;
дает в результате 0;
Операции + и — имеют как одноместную, так и двухместную формы. Одноместная форма операции плюс (+5) является избыточной, поскольку по