A logical expression is a sequence of one or more logical operands and logical operators. It evaluates to a single logical value. The operators can be any of the following.
Table 34 Logical Operators
Operator 
Standard Name 

.AND. .OR. .NEQV. .XOR. .EQV. .NOT. 
Logical conjunction Logical disjunction (inclusive OR) Logical nonequivalence Logical exclusive OR Logical equivalence Logical negation 
The period delimiters are necessary.
Two logical operators cannot appear consecutively, unless the second one is the .NOT. operator.
Logical operators are evaluated according to the following precedence:
Table 35 Logical Operator Precedence
Operator 
Precedence 

.NOT. .AND. .OR. .NEQV.,.XOR., .EQV. 
Highest
Lowest 
If the logical operators are of equal precedence, they are evaluated left to right.
If the logical operators appear along with the various other operators in a logical expression, the precedence is as follows.
Table 36 Operator Precedence
Operator 
Precedence 

Arithmetic Character Relational Logical 
Highest
Lowest 
The following table shows the meanings of simple expressions:
Table 37 Logical Expressions and Their Meanings
Expression 
Meaning 

X .AND. Y X .OR. Y X .NEQV. Y X .XOR. Y X .EQV. Y .NOT. X 
Both X and Y are true. Either X or Y, or both, are true. X and Y are not both true and not both false. Either X or Y is true, but not both. X and Y are both true or both false. Logical negation. 
This is the syntax for the assignment of the value of a logical expression to a logical variable:
v = e 


e 
A logical expression, an integer between 128 and 127, or a single character constant 
v 
A logical variable, array element, or record field 
Execution of a logical assignment statement causes evaluation of the logical expression e and assignment of the resulting value to v. If e is a logical expression, rather than an integer between 128 and 127, or a single character constant, then e must have a value of either true or false.
Logical expressions of any size can be assigned to logical variables of any size.
Assigning numerics to logicals is allowed. (All nonzero values are treated as .TRUE., and zero is .FALSE.) This practice is nonstandard, however, and is not portable. @
Example: A logical assignment:
LOGICAL B1*1, B2*1 LOGICAL L3, L4 B2 = B1 B1 = L3 L4 = .TRUE.