### 2.8.6 Logical Operators

D provides the binary logical operators that are listed in the following table for use in your programs. The first two operators are equivalent to the corresponding ANSI C operators.

Table 2.9 D Logical Operators

Operator

Description

`&&`

Logical `AND`: true if both operands are true

`||`

Logical `OR`: true if one or both operands are true

`^^`

Logical `XOR`: true if exactly one operand is true

Logical operators are most frequently used in writing D predicates. The logical `AND` operator performs the following short-circuit evaluation: if the left-hand operand is false, the right-hand expression is not evaluated. The logical `OR` operator also performs the following short-circuit evaluation: if the left-hand operand is true, the right-hand expression is not evaluated. The logical `XOR` operator does not short-circuit. Both expression operands are always evaluated.

In addition to the binary logical operators, the unary `!` operator can be used to perform a logical negation of a single operand: it converts a zero operand into a one and a non-zero operand into a zero. By convention, D programmers use `!` when working with integers that are meant to represent boolean values and ```== 0``` when working with non-boolean integers, although the expressions are equivalent.

The logical operators may be applied to operands of integer or pointer types. The logical operators interpret pointer operands as unsigned integer values. As with all logical and relational operators in D, operands are true if they have a non-zero integer value and false if they have a zero integer value.