# Boolean Algebra with Julia (oops Should be bitwise operators)

**Note:** This blog should have been named bitwise operator, but yes will correct it after some time. Renaming it now will break the link and will leave many with a a 404 page.

Okay, today let’s look at Boolean algebra with Julia. The notebook for this blog is here https://gitlab.com/data-science-with-julia/code/-/blob/master/binary_arithmetic.ipynb

In Julia, something true is represented by a constant `true`

and something false is represented by a constant `false`

. These two things are inbuilt in Julia and you can’t keep a variable like `true = 1`

, Julia will throw an error.

Now let’s look at operators that do binary arithmetic. The and operation is done using the and `&`

operator as shown:

```
true & true
```

Output:

```
true
```

```
true & false
```

Output:

```
false
```

We use the pipe `|`

symbol to do the OR operation as shown:

```
false | true
```

Output:

```
true
```

```
false | false
```

Output:

```
false
```

The tilde `~`

symbol is used for a NOT as shown:

```
~ false
```

Output:

```
true
```

⊻ does the XOR operation, to type it, type `\xor`

and press `Tab`

key.

```
true ⊻ true
```

Output:

```
false
```

```
true ⊻ false
```

Output:

```
true
```

```
false ⊻ false
```

Output:

```
false
```

The `>>`

is used for arithmetic right shift, so 3 divided by 2 is kinda one.

```
3 >> 1
```

Output:

```
1
```

The `>>>`

is used for logical right shift

```
3 >>> 1
```

Output:

```
1
```

In the below example I have no clue why it became -2, may be I will explore it in later blogs

```
-3 >> 1
```

Output:

```
-2
```

I am blown away why it produces such a result in the example below, may be I will investigate when I am not lazy:

```
-3 >>> 1
```

Output:

```
9223372036854775806
```

The `<<`

is used for arithmetic left shift, so shifiting `101`

by `1`

becomes `1010`

which is 6 as shown below:

```
3 << 1
```

Output:

```
6
```

Now let’s try out some De Morgan’s Law:

```
x = true
y = false
~(x | y) == ~x & ~y
```

Output:

```
true
```

and an another one:

```
~(x & y) == ~x | ~y
```

Output:

```
true
```