Знакомство с логическими операторами и операциями стоит начать с отведённого для этого логического типа 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.