Question: I am confused as to when I should use Boolean vs bitwise operators

* `and` vs `&`
* `or` vs `|`

Could someone enlighten me as to when do i use each and when will using one over the other affect my results?

Answer: 
In theory, `and` and `or` come straight from boolean logic (and therefore operate on two booleans to produce a boolean), while `&` and `|` apply the boolean and/or to the individual bits of integers. There are a lot lot of questions here on how the latter work exactly.

Here are practical differences that potentially affect your results:

1. `and` and `or` short-circuiting, e.g. `True or sys.exit(1)` will not exit, because for a certain value of the first operand (`True or ...`, `False and ...`), the second one wouldn't change the result so does not need to be evaluated. But `|` and `&` don't short-circuit - `True | sys.exit(1)` throws you outta the REPL.
2. `&` and `|` are regular operators and can be overloaded, while `and` and `or` are forged into the language (although the special method for coercion to boolean may have side effects).
	* This also applies to some other languages with operator overloading
3. `and` and `or` return the value of an operand instead of `True` or `False`. This doesn't change the meaning of boolean expressions in conditions - `1 or True` is `1`, but `1` is true, too. But it was once used to emulate a conditional operator (`cond ? true_val : false_val` in C syntax, `true_val if cond else false_val` in Python). For `&` and `|`, the result type depends on how the operands overload the respective special methods (`True & False` is `False`, `99 & 7` is `3`, for sets it's unions/intersection...).
	* This also applies to some other languages like Ruby, Perl and Javascript

But even when e.g. `a_boolean & another_boolean` would work identically, the right solution is using `and` - simply because `and` and `or` are associated with boolean expression and condition while `&` and `|` stand for bit twiddling.
Logical Operations
------------------

are usually used for conditional statements. For example:

```
if a==2 and b>10:
    # Do something ...

```

It means if both conditions (`a==2` and `b>10`) are true at the same time then the conditional statement body can be executed.

Bitwise Operations
------------------

are used for data manipulation and extraction. For example, if you want to extract the four LSB (Least Significant Bits) of an integer, you can do this:

```
p & 0xF

```