Bitwise Operators in Brainfuck Your task is to create one brainfuck program for each of the following binary operators. Each program should take one or two 8-bit numbers (A and B) from input and calculate the specified operation:


A XOR B
A AND B
A OR B
A Shifted Left by 1 (circular shift)
NOT A


You do not have to implement all 5. Score is calculated by:

#totalCharacters + {4000 * #problemsNotCompleted}


So valid scores are from zero (best) to 20,000(nothing completed).

I don't care where you store the result, or whether or not you preserve the input. Assume 8-bit cells, and as many empty cells as you need to the right only. 

You may assume the numbers are already in whatever memory location works best for you, so you don't need to worry about IO operations.
Score: 686

All snippets assume that the numbers are already loaded in cell 0 and 1 and that the pointer points to cell 0.
I can add an atoi snippet later if that's required for the challenge. For now, you can try the code like this:

+++++++++&gt;    number 1
++++&lt;         number 2




XOR, 221

Result is written to cell 10, pointer ends at cell 5

&gt;&gt;&gt;&gt;&gt;++++++++[-&lt;&lt;&lt;&lt;&lt;[-&gt;&gt;+&lt;&lt;[-&gt;&gt;-&gt;+&lt;]&gt;&gt;[-&gt;&gt;&gt;&gt;+&lt;&lt;]&lt;&lt;&lt;&lt;]&gt;&gt;&gt;[-&lt;&lt;&lt;+&gt;&gt;&gt;]&lt;&lt;[-&gt;+&lt;[-&gt;-&gt;+&gt;
&gt;&gt;&gt;&gt;]&gt;[-&gt;&gt;&gt;&gt;&gt;+&gt;&gt;]&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;]&gt;&gt;[-&lt;&lt;+&gt;&gt;]&gt;&gt;&gt;[-&gt;&gt;+&lt;&lt;]&gt;[&gt;[-&lt;-&gt;]&lt;[-&gt;+&lt;]]&gt;[[-]&lt;&lt;&lt;[-&gt;+&gt;-&lt;&lt;
]&gt;[-&lt;+&gt;]+&gt;+++++++[-&lt;[-&gt;&gt;++&lt;&lt;]&gt;&gt;[-&lt;&lt;+&gt;&gt;]&lt;]&lt;[-&gt;&gt;&gt;&gt;+&lt;&lt;&lt;&lt;]&gt;&gt;]&lt;&lt;&lt;]


AND, 209

Result is written to cell 10, pointer ends at cell 5

&gt;&gt;&gt;&gt;&gt;++++++++[-&lt;&lt;&lt;&lt;&lt;[-&gt;&gt;+&lt;&lt;[-&gt;&gt;-&gt;+&lt;]&gt;&gt;[-&gt;&gt;&gt;&gt;+&lt;&lt;]&lt;&lt;&lt;&lt;]&gt;&gt;&gt;[-&lt;&lt;&lt;+&gt;&gt;&gt;]&lt;&lt;[-&gt;+&lt;[-&gt;-&gt;+&gt;
&gt;&gt;&gt;&gt;]&gt;[-&gt;&gt;&gt;&gt;&gt;+&gt;&gt;]&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;]&gt;&gt;[-&lt;&lt;+&gt;&gt;]&gt;&gt;&gt;[-&gt;[-&gt;+&lt;]&lt;]&gt;[-]&gt;[-&lt;&lt;&lt;[-&gt;+&gt;-&lt;&lt;]&gt;[-&lt;+&gt;]+&gt;++
+++++[-&lt;[-&gt;&gt;++&lt;&lt;]&gt;&gt;[-&lt;&lt;+&gt;&gt;]&lt;]&lt;[-&gt;&gt;&gt;&gt;+&lt;&lt;&lt;&lt;]&gt;&gt;]&lt;&lt;&lt;]


OR, 211

Result is written to cell 10, pointer ends at cell 5

&gt;&gt;&gt;&gt;&gt;++++++++[-&lt;&lt;&lt;&lt;&lt;[-&gt;&gt;+&lt;&lt;[-&gt;&gt;-&gt;+&lt;]&gt;&gt;[-&gt;&gt;&gt;&gt;+&lt;&lt;]&lt;&lt;&lt;&lt;]&gt;&gt;&gt;[-&lt;&lt;&lt;+&gt;&gt;&gt;]&lt;&lt;[-&gt;+&lt;[-&gt;-&gt;+&gt;
&gt;&gt;&gt;&gt;]&gt;[-&gt;&gt;&gt;&gt;&gt;+&gt;&gt;]&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;]&gt;&gt;[-&lt;&lt;+&gt;&gt;]&gt;&gt;&gt;[-&gt;&gt;+&lt;&lt;]&gt;[-&gt;+&lt;]&gt;[[-]&lt;&lt;&lt;[-&gt;+&gt;-&lt;&lt;]&gt;[-&lt;+&gt;]+&gt;
+++++++[-&lt;[-&gt;&gt;++&lt;&lt;]&gt;&gt;[-&lt;&lt;+&gt;&gt;]&lt;]&lt;[-&gt;&gt;&gt;&gt;+&lt;&lt;&lt;&lt;]&gt;&gt;]&lt;&lt;&lt;]


Rotate Left, 38

Result is written to cell 1, pointer ends at cell 4

[-&gt;++&gt;+&lt;[&gt;-]&gt;[-&gt;&gt;+&lt;]&lt;&lt;&lt;]&gt;&gt;&gt;&gt;[-&lt;&lt;&lt;+&gt;&gt;&gt;]


NOT, 7

Result is written to cell 1, pointer ends at cell 0

+[+&gt;+&lt;]




Explanation:

XOR, AND and OR all work in a similiar fashion: Calculate n/2 for each number
and remember n mod 2. Calculate the logical XOR/AND/OR for the single bits. If
the resulting bit is set, add 2^n to the result. Repeat that 8 times.

This is the memory layout I used: 

 0      1        2        3      4        5         6        7
n1  |  n2  |  marker  |  n/2  |  0  |  counter  |  bit1  |  bit2  |

  8        9        10
temp  |  temp  |  result


Here's the source for XOR (numbers indicate where the pointer is at that time):

&gt;&gt;&gt;&gt;&gt;
++++ ++++ counter
[
    -
    &lt;&lt;&lt;&lt;&lt;

    divide n1 by two
    [ 0 
        -
        &gt;&gt;+ set marker 2
        &lt;&lt; 0
        [-&gt;&gt;-&gt;+&lt;] dec marker inc n/2
        &gt;&gt; 2 or 4
        [-&gt;&gt;&gt;&gt;+&lt;&lt;] 
        &lt;&lt;&lt;&lt;
    ]
    &gt;&gt;&gt;
    [-&lt;&lt;&lt;+&gt;&gt;&gt;]
    &lt;&lt;

    divide n2 by two
    [ 1
        -
        &gt;+ set marker 2
        &lt; 1
        [-&gt;-&gt;+&gt;&gt;&gt;&gt;&gt;] dec marker inc n/2
        &gt; 2 or 9
        [-&gt;&gt;&gt;&gt;&gt;+&gt;&gt;]
        &lt;&lt;&lt;&lt; &lt;&lt;&lt;&lt; 
    ]
    &gt;&gt;[-&lt;&lt;+&gt;&gt;] 3

    &gt;&gt;&gt; 6

    [-&gt;&gt;+&lt;&lt;]&gt;[&gt;[-&lt;-&gt;]&lt;[-&gt;+&lt;]]&gt;  one bit xor 8

    [
        [-]&lt;&lt;&lt; 5
        [-&gt;+&gt;-&lt;&lt;] copy counter negative
        &gt; 6
        [-&lt;+&gt;]
        +&gt; 7
        ++++ +++  cell 6 contains a one and cell 7 how many bits to shift
        [-&lt;[-&gt;&gt;++&lt;&lt;]&gt;&gt;[-&lt;&lt;+&gt;&gt;]&lt;]  2^n
        &lt; 6
        [-&gt;&gt;&gt;&gt;+&lt;&lt;&lt;&lt;]
        &gt;&gt; 8
    ]

    &lt;&lt;&lt;
]




For left rotate, once again there is a marker in cell 2 to determine if 2n
is zero, since you can only determine if a cell is non-zero directly. If
so, a carry bit is written to cell 4 and later added to 2n. This is the memory
layout:

0      1        2       3       4   
n  |  2n  |  marker  |  0  |  carry