# ~/

## Brandon Rozek

PhD Student @ RPI studying Automated Reasoning in AI and Linux Enthusiast.

# Lecture for February 6th

## If Statements – Cont.

Inside the parenthesis of the `if` statement must be a boolean expression. This is an expression that evaluates to either `true` or `false`. We can do more complex boolean expressions through logical operators.

## Logical Operators

NOT `!a` this is true when `a` is false

AND `a && b ` this is true when both operands are true

OR `a || b` this is true when either a is true OR b is true

## Truth Tables

• Show all possible outcomes
• It breaks the expression down into parts

### Not

Let’s look at the most simplest case. Not.

a !a
true false
false true

### AND

a b a && b
true true true
true false false
false true false
false false false

Notice here that `a && b` is only true when both `a` and `b` are true.

### OR

a b a || b
true true true
true false true
false true true
false false false

Notice here that `a || b` is only false when both `a` and `b` are false.

## Precedence (Order of Operations)

Parenthesis `()`
Logical Not `!`
Arithmetic Operators `*` `/` `%` `+` `-`
Relational Operators `<` `<=` `>` `>=`
Equality and Inequality operators `==` `!=`
Logical AND `&&`
Logical OR `

## Playing with Truth Tables Example

### a && !b

a b !b a && !b
true true false false
true false true true
false true false false
false false true false

### !a || b

a b !a !a || b
true true false true
true false false false
false true true true
false false true true

### !(a || b && c)

a b c b && c a || (b && c) !(a || b && c)
true true true true true false
true true false false true false
true false true false true false
false true true true true false
true true false false true false
true false true false true false
false true true true true false
false false false false false true

### !a || b && c

a b c !a b && c !a || b && c
true true true false true true
true true false false false false
true false true false false false
false true true true true true
true false false false false false
false true false true false true
false false true true false true
false false false true false true

## Distributive Property of Logical Operators

The following statements are equivalent

`!(a && b)` is equivalent to `!a || !b`

Notice how when you distribute the `!` you have to flip the operand as well. `&&` becomes `||`

Same is true for the following example

`!(a || b)` is equivalent to `!a && !b`

`!(a || b && c)` is equivalent to `!a && (!b || !c)`

## Short Circuit Evaluation

In an `&&` (AND) statement, if the left side is `false`, there is no need to evaluate the right side. Since it’s going to be false anyways!!

``````false && true; // FALSE no matter what the right side is
``````

In an `||` (OR) statement, if the left side is `true, there is no need to evaluate the right side. Since it’s going to be true by default!!

``````true || false; // TRUE no matter what the right side is
``````

Java takes this shortcut by default for efficiency reasons