Оператор Не (!) Оператор не ! удобен для противоположного обращения переменной типа
boolean. Посмотрите на следующий пример кода:
bool wearingSocks = true; //
носки надеты
if( !wearingSocks ) //
тоже самое что и if( false == wearingSocks )
{
cout << "
Надеть носки!" << endl;
} else
{
cout
<< "Вы уже в носках" << endl;
}
58 |
С т р а н и ц а
Данное утверждение проверяет, надеты ли на вас носки. Затем вы даёте команду,
надеть носки. Оператор не ! обращает любое значение в переменной типа boolean
на противоположное.
Мы используем так называемую “таблицу правды”, чтобы показать все возможные
результаты использования оператора не ! для булевых переменных:
носкиНадеты wearingSocks !носкиНадеты !wearingSocks true false false true Итак, в то время как wearingSocks имеет значение true, !wearingSocks имеет
противоположное значение false.
Упражнения 1. Как вы думаете, каким будет значение !!wearingSocks, если значение
wearingSocks будет true?
2. Каково значение переменной isVisible, после запуска следующего кода?
bool hidden = true;
// bool спрятан = true
bool isVisible = !hidden;
// bool являетсяВидимым = !спрятан
Решение 1. Если wearingSocks равно true, тогда !wearingSocks равно false. Из чего
следует, что !!wearingSocks снова обретает значение true. Это как сказать:”Я
не не голоден”. "Не не" даёт двоенное отрицание, так что это предложение
означает, что я вообще то голоден.
2. Ответ на второй вопрос будет false. Переменная hidden имела значение true,
так что !hidden даёт false. После чего false сохраняется в переменной isVisible.
Подсказка Оператор не ! иногда в просторечии называется bang (что либо внезапное, как
хлопок). Предыдущая операция bang bang (!!) является двойным негативом и
двойной логической инверсией. Если вы применили bang-bang для булевой
переменной, то нет никого цепного изменения переменной. Если вы примените
bang-bang для целочисленной переменной (int), то эта переменная просто станет
59 |
С т р а н и ц а
булевой переменной (true или false). Если значение целочисленной переменной
больше нуля, оно упрощается до значения true. Если значение целочисленной
переменной уже является 0, оно упрощается до значения false.