# Bitwise expressions¤

The bit shifts treat a value as a series of bits, the binary digits of the value are moved, or shifted, to the left or right.

There are also bitwise `!AND`

, `!OR`

and `!NOT`

expression, at Logic chapter.

`!SHL`

: Left logical shift¤

Type: *Mapping*.

```
!SHL
what: <...>
by: <...>
```

Tip

Left shifts could be used as fast multiplication by 2, 4, 8 and so on.

Example

```
!SHL
what: 9
by: 2
```

`9`

is represented by the binary value `1001`

. The left logical shift moves the bits to the left by 2. The result is `100100`

, which is `36`

in the base-ten system. This is the same result as `9 * (2^2)`

.

`!SHR`

: Right logical shift¤

Type: *Mapping*.

```
!SHR
what: <...>
by: <...>
```

Tip

Right shifts could be used as fast division by 2, 4, 8 and so on.

Example

```
!SHR
what: 16
by: 3
```

`16`

is represented by `10000`

. The logical shift moves the bits to the right by `3`

. The result is `10`

, which is `2`

in base-ten system. This is the same result as `16 / (2^3)`

.

`!SAL`

: Left arithmetic shift¤

Type: *Mapping*.

```
!SAL
what: <...>
by: <...>
```

Example

```
!SAL
what: 60
by: 2
```

`!SAR`

: Right arithmetic shift¤

Type: *Mapping*.

```
!SAR
what: <...>
by: <...>
```

`!ROL`

: Left rotation (circular) shift¤

Type: *Mapping*.

```
!ROL
what: <...>
by: <...>
```

`!ROR`

: Right rotation (circular) shift¤

Type: *Mapping*.

```
!ROR
what: <...>
by: <...>
```