Знакомство с логическими операторами и операциями стоит начать с отведённого для этого логического типа bool.

Он хранит состояние истина или ложь - true или false соответственно.

int main() {
    bool a = false;
    std::cout << a << std::endl;
}
0

С этим типом по особенному работает вывод. Логические значения true или false преобразуются в числа 1 и 0.

int a = false;
std::cout << a << std::endl;

Интересно, что булевы литералы true или false могут быть неявно преобразованы в тип int и наоборот, только во втором случае это работает неоднозначно.

bool a = 0;
bool b = 1;
bool c = 2;
bool d = -1;
std::cout << a << std::endl; // 0
std::cout << b << std::endl; // 1
std::cout << c << std::endl; // 1
std::cout << d << std::endl; // 1

Во всех случаях, кроме 0 при приведении числа к типу bool вы получите единицу.

Оператор логического "И"

Оператор && является бинарным оператором, то есть выполняющимся для двух операндов, например

int main() {
    bool a = true;
    bool b = false;
    bool result = a && b;
    std::cout << result << std::endl; // 0
}

Можно выводить без использования результирующей переменной

std::cout << a && b << std::endl;
mismatch in formal parameter list
'<<': unable to resolve function overload		
cannot determine which instance of function template "std::endl" is intended

Компилятор точно не понимает что мы хотим от него в этом случае. Чтобы избежать ошибок необходимо поставить это выражение в круглые скобки, тем самым определив порядок

std::cout << (a && b) << std::endl;

Этот результат выполнения операции && будет истиной только в том случае, если оба операнда (левый И правый) истинны.

Можно наглядно это увидеть, если вывести все четыре варианта развития событий

Оформите подписку, чтобы иметь доступ ко всем публикациям без ограничений. Вы получите мгновенный доступ к полным версиям материалов, исходному коду и новым публикациям сразу после их выхода.

Я регулярно публикую материал и разборы ситуаций для различных игр, движков, а так же подходов разработки включая Internal, External и DMA.

Эта публикация содержит только часть статьи.

Полные уроки по C++, реверс-инжинирингу и разработке софта вы можете найти тут: