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