False || true gives 0 in the MinGW v 6.3.0-1 compiler

This is the C ++ program I wrote:

#include <iostream>
using namespace std;

int main() {

    cout << "\n" << "false || false" << ": " << false || false;
    cout << "\n" << "false || true" <<  ": " << false || true;
    cout << "\n" << "true || false" << ": " <<  true || false;
    cout << "\n" << "true || true" << ": " <<  true || true;
    cout << "\n" << "false && false" << ": " << false && false;
    cout << "\n" << "false && true" << ": " << false && true;
    cout << "\n" << "true && false" << ": " << true && false;
    cout << "\n" << "true && true" << ": " << true && true;

    return 0;
}

and this is the result.

false || false: 0
false || true: 0
true || false: 1
true || true: 1
false && false: 0
false && true: 0
true && false: 1
true && true: 1

Can someone explain to me why false || trueit gives 0? I am using MinGW C ++ Compiler version 6.3.0-1.

+4
source share
1 answer

In accordance with the Priority of the C ++ operator , it operator<<has a higher priority than operator ||(and operator &&), therefore it cout << false || true;will be interpreted as (cout << false) || true;; you will always receive false.

To solve the problem, you must add parentheses to explicitly indicate priority, for example. cout << (false || true);.

+8
source

Source: https://habr.com/ru/post/1690106/


All Articles