CLOSE
Boolean Values

Boolean Values

Updated on 30 Jun, 2026 16 mins read 1,444 views

Understanding Boolean Values

Boolean values are the building blocks of logical operations, enabling programmers to express and manipulate true/false conditions in their code.

Boolean variables

Boolean variables are variables that can have only two possible values: true, and false.

To declare a  Boolean variable, we use the keyword bool. It can take one of two values: true or false.

bool boolUninitialized; // uninitialized, default to false
bool boolInitialized = true; // initialized

Boolean values are not actually stored in Boolean variables as the words true or false. Instead, they are stored as integers: true becomes the integer 1, and false becomes the integer 0. Similarly, when Boolean values are evaluated, they don't actually evaluate to true or false. They evaluate to the integers 0 (false) or 1(true). Because Booleans actually store integers, they are considered as integral type.

Printing Boolean values

When we print Boolean values, std::cout prints 0 for false and 1 for true:

#include <iostream>

int main()
{
    std::cout << true << '\n'; // true evaluates to 1
    std::cout << !true << '\n'; // !true evaluates to 0

    bool b {false};
    std::cout << b << '\n'; // b is false, which evaluates to 0
    std::cout << !b << '\n'; // !b is true, which evaluates to 1
    return 0;
}

// Output
1
0
0
1

If you want std::cout to print true or false instead of 0 or 1, you can use std::boolalpha Here's an example:

#include <iostream>

int main()
{
    std::cout << true << '\n';
    std::cout << false << '\n';

    std::cout << std::boolalpha; // print bools as true or false

    std::cout << true << '\n';
    std::cout << false << '\n';
    return 0;
}

// Output
1
0
true
false

You can use std::noboolalpha to turn it back off.

Integer to Boolean conversion

When using uniform initialization, you can initialize a variable using integer literals 0 (for false) and 1 (for true) but your really should be using false and true instead. Other integer literals cause compilation errors:

#include <iostream>

int main()
{
	bool bFalse { 0 }; // okay: initialized to false
	bool bTrue  { 1 }; // okay: initialized to true
	bool bNo    { 2 }; // error: narrowing conversions disallowed

	std::cout << bFalse << bTrue << bNo << '\n';

	return 0;
}

However, in any other context where an integer can be converted to a Boolean, the integer 0 is converted to false, and other integer is converted to true.

#include <iostream>

int main()
{
	std::cout << std::boolalpha; // print bools as true or false

	bool b1 = 4 ; // copy initialization allows implicit conversion from int to bool
	std::cout << b1 << '\n';

	bool b2 = 0 ; // copy initialization allows implicit conversion from int to bool
	std::cout << b2 << '\n';


	return 0;
}

// Output
true
false

Note: bool b1 = 4; may generate a warning. If so you will have to disable treating warnings as errors to compile the example.

Inputting Boolean values

Inputting Boolean values using std::cin sometimes trips new programmers up.

Consider the following example:

#include <iostream>

int main()
{
	bool b{}; // default initialize to false
	std::cout << "Enter a boolean value: ";
	std::cin >> b;
	std::cout << "You entered: " << b << '\n';

	return 0;
}
Enter a Boolean value: true
You entered: 0

What just happened here?

It turns out that std::cin only accepts two inputs for Boolean variables: 0 and 1. (not true or false). Any other inputs will cause std::cin to silently fail. In this case, because we entered true, std::cin silently failed. A failed input will also zero-out the variable, so b also gets assigned value false. Consequently, when std::cout prints a value for b, it prints 0.

To allow std::cin to accept false and true as inputs, the std::boolalpha options has to be enabled:

#include <iostream>

int main()
{
	bool b{};
	std::cout << "Enter a boolean value: ";

	// Allow the user to enter 'true' or 'false' for boolean values
	// This is case-sensitive, so True or TRUE will not work
	std::cin >> std::boolalpha;
	std::cin >> b;

	std::cout << "You entered: " << b << '\n';

	return 0;
}

However, when std::boolalpha is enabled, 0 and 1 will no longer be interpreted as Booleans inputs. (they both resolve to “false" as does any non-true input).

 

 

 

 

 

 

 

 

 

 

 

 

Buy Me A Coffee

Leave a comment

Your experience on this site will be improved by allowing cookies Cookie Policy