The `bool`

data type can be either `true`

or `false`

and is based on the concept that the validity of all logical statements must be either true or false. A *boolean expression* is any expression that evaluates to, or returns, a boolean value.

Booleans encode the science of logic into computers, allowing for logical reasoning in programs. In a broad sense, the computer can encode the truthfulness or falseness of certain statements, and based on that information, completely alter the behavior of the program.

bool skyIsBlue = true;bool penguinsCanFly = false;Console.WriteLine($"True or false, is the sky blue? {skyIsBlue}.");// This simple program illustrates how booleans are declared. However, the real power of booleans requires additional programming constructs such as conditionals.

*Logical operators* receive boolean expressions as input and return a boolean value.

The `&&`

operator takes two boolean expressions and returns `true`

only if they both evaluate to `true`

.

The `||`

operator takes two boolean expressions and returns `true`

if either one evaluates to `true`

.

The `!`

operator takes one boolean expression and returns the opposite value.

// These variables equal true.bool a = true && true;bool b = false || true;bool c = !false;// These variables equal false.bool d = true && false;bool e = false || false;bool f = !true;

A *truth table* is a way to visualize boolean logic. Since booleans only have two possible values, that means that we can compactly list out in a table all the possible input and output pairs for unary and binary boolean operators.

The image below gives the *truth tables* for the *AND*, *OR*, and *NOT* operators. For each row, the last column represents the output given that the other columns were fed as input to the corresponding operator.