mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-12-28 15:21:41 +00:00
139 lines
No EOL
4.4 KiB
Markdown
139 lines
No EOL
4.4 KiB
Markdown
# 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!!
|
|
|
|
```java
|
|
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!!
|
|
|
|
```java
|
|
true || false; // TRUE no matter what the right side is
|
|
```
|
|
|
|
Java takes this shortcut by default for efficiency reasons |