Boolean Expressions

Decisions are based on Boolean expressions, algebra-like expressions with a value of true or false. The term Boolean is named after George Boole, a well-known mathematician, philosopher, and logician, who developed a systematic approach to logic now known as Boolean algebra. The basis of Boolean algebra was published in his text "The Laws of Thought", and provides a significant part of the foundation of computer science.

The C language does not have a separate Boolean data type. Recall that the design philosophy of C is minimalist and explicit rather than bloated and abstract. Boolean values in C are represented as they are stored internally, as integer values. A value of 0 is interpreted as false and any non-zero value is interpreted as true. A derived Boolean type called bool is provided in the standard header file stdbool.h, along with true and false constants. We can use this to make our C code more self-documenting, rather than defining Boolean variables as int.

Boolean Constants

Since the C language does not have a separate Boolean data type, there are no built-in constants. Traditionally, C programmers would define a Boolean variable as an integer.

#include <sysexits.h>

int     main()
{
int     raining;

raining = 0;    // 0 means false, non-zero means true

...
return EX_OK;
}

However, the bool data type and the values true and false are now defined in the standard header file stdbool.h. While not part of the C language, it is included with all modern C compilers.

#include <stdbool.h>
#include <sysexits.h>

int     main()
{
bool    raining;

raining = false;

...
return EX_OK;
}

Fortran provides logical constants .true. and .false.. The periods are actually part of the constants, and are a vestige of early Fortran, which used periods to delineate many program elements (tokens) in order to make parsing easier.

program example
implicit none

logical raining

raining = .false.
end program

Relational Expressions

A relational expression is a Boolean expression (an expression with a value of true or false) that compares (tests the relation between) two values of any type, such as integers, real numbers, or strings.

Table 19.1. Relational Expressions

ExpressionValue
1 > 2false
5 = 10/2true
"Bart" = "Bert"false

Relational expressions in C are actually integers, with a value of 0 for false and 1 for true, which can be represented as false and true if stdbool.h is included in the program. C constructs such as if statements and loops will interpret a value of zero as false and any non-zero value as true.

Relational expressions in Fortran have the data type logical and a value of .false. or .true..

Relational Operators

Relational expressions are formed using Relational operators and two values. C and Fortran provide the usual arithmetic relations such as "equals", "less than",etc.

Caution

Floating point values should NEVER be compared for equality. Due to round-off error, it is possible that the actual value might be slightly different than the expected value and therefore not equal to the value we're looking for. For example, the following condition is likely to fail, because 0.1 cannot be accurately represented in binary floating point. Even if it could be represented accurately, the value of thickness might be off due to round off during computations.

if ( thickness == 0.1 )

Fortran 90 and later use more intuitive symbols for operators, while Fortran 77 and earlier use old style operators. Fortran 90 is backward-compatible with Fortran 77, so the old style operators can still be used. This allows old Fortran 77 code to be compiled with the newer compilers, but newly written code should use the new operators.

Table 19.2. Relational Operators

Relational OperatorCFortran 90 and LaterFortran 77 and Earlier
Not equal!=/=.ne.
Equals====.eq.
Less than<<.lt.
Less or equal<=<=.le.
Greater than>>.gt.
Greater or equal>=>=.ge.

Fortran 90 adopted the operators from C to replace the arcane .ne., etc., except for !=, because '!' marks the beginning of a comment in Fortran.

Boolean Operators

Some Boolean expressions entail more than one relation. For example, an airline may want to offer free peanuts to both kids and seniors, in which case we would want to know if age < 18 or age >= 65.

Table 19.3. Boolean Operators

OperationC OperatorFortran Operator
and&&.and.
or||.or.
not!.not.

Note

Be sure to thoroughly review the instructions in Section 2, “Practice Problem Instructions” before doing the practice problems below.
1. What is the data type of a Boolean expression in C? In Fortran?

2. What values represents true and false in C? In Fortran?

3. Are there named Boolean constants in C?

4. What is a relational expression?