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:
+++++++++> number 1 ++++< number 2
XOR, 221
Result is written to cell 10, pointer ends at cell 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+> >>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[>[-<->]<[->+<]]>[[-]<<<[->+>-<< ]>[-<+>]+>+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
AND, 209
Result is written to cell 10, pointer ends at cell 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+> >>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->[->+<]<]>[-]>[-<<<[->+>-<<]>[-<+>]+>++ +++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
OR, 211
Result is written to cell 10, pointer ends at cell 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+> >>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[->+<]>[[-]<<<[->+>-<<]>[-<+>]+> +++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
Rotate Left, 38
Result is written to cell 1, pointer ends at cell 4
[->++>+<[>-]>[->>+<]<<<]>>>>[-<<<+>>>]
NOT, 7
Result is written to cell 1, pointer ends at cell 0
+[+>+<]
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):
>>>>> ++++ ++++ counter [ - <<<<< divide n1 by two [ 0 - >>+ set marker 2 << 0 [->>->+<] dec marker inc n/2 >> 2 or 4 [->>>>+<<] <<<< ] >>> [-<<<+>>>] << divide n2 by two [ 1 - >+ set marker 2 < 1 [->->+>>>>>] dec marker inc n/2 > 2 or 9 [->>>>>+>>] <<<< <<<< ] >>[-<<+>>] 3 >>> 6 [->>+<<]>[>[-<->]<[->+<]]> one bit xor 8 [ [-]<<< 5 [->+>-<<] copy counter negative > 6 [-<+>] +> 7 ++++ +++ cell 6 contains a one and cell 7 how many bits to shift [-<[->>++<<]>>[-<<+>>]<] 2^n < 6 [->>>>+<<<<] >> 8 ] <<< ]
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