# Expressions And Operators: Logical AND

The binary operator `&&` determines the truth of an expression involving two operands. For example:

``````if (\$month > 1 && \$month <= 12) ...
``````

Here, the left-hand operand, `\$month > 1`, is evaluated first. If the result is `false`, the right-hand operand, `\$month <= 12`, is not evaluated, and the result has type `bool`, value `false`. Otherwise, the right-hand operand is evaluated, and if it has the value `false`, the result has type `bool`, value `false`; otherwise, the result has type `bool`, value `true`.

Consider the following:

``````if (\$month > 6 && get_value(--\$count) < 50) ...
``````

Only if `\$month` is greater than 6 is `\$count` decremented and function `get_value` called. That is, there is a sequence point after the evaluation of the left-hand operand. Consider the following:

``````if (\$x++ + do_it() < 15 && \$values[\$x] > 10) ...
``````

Because of the sequence point, we know that if the left-hand operand tests `true`, and we're evaluating the right-hand operand, `\$x` will already have been incremented and function `do_it` will have been called.

If either operand does not have type `bool`, its value is first converted to that type.