Bitwise Operators in Brainfuck
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