# Bitwise Scanner

Bitwise Scanner is a bitwise language created by User:A. It is based on scanning a bitwise tape.

# Commands

```(): Execute the code block if the current bit is 0.
{}: Execute the code block if the current bit is 1.
[]: Sequentially query the bitwise tape, from the lowest digit to the highest digit.
~: Multiply the current bit by -1 and add 1. Equivalent to flipping the bit.
X: Stop the scanning.
```

# The increment procedure

```000->001
001->010
010->011
011->100
```

We can conclude that the algorithm is(without doing math):

```If the lowest digit is zero,
Flip the lowest bit
Otherwise(if the lowest bit is 1),
scan from the lowest digit to the highest digit:
If the current bit is 1,
flip this bit
Otherwise (current bit is 0)
flip this bit and stop scanning
```

This can be achieved in Bitwise Scanner like this:

```(~){[{~}(~X)]}
```

# The decrement procedure

```111->110
110->101
101->100
100->011
011->010
010->001
```

The main algorithm for this is:

```If the lowest bit is 1:
Flip the lowest bit
Otherwise(if the lowest bit is 0):
Scan the binary array:
If the current bit is 0:
Flip the current bit
Otherwise:
Flip the current bit and stop scanning
```

This can be achieved as:

`{~}([(~){~X}])`

# Computational Class

This language is not Turing complete, or even FSM complete, as it cannot store state from bit to bit. Consider, for example, a program that sets every bit to the previous bit's value. This would be impossible to do in Bitwise Scanner.