Оценка: 686
Все фрагменты предполагают, что числа уже загружены в ячейки 0 и 1 и что указатель указывает на ячейку 0. Я могу добавить фрагмент atoi позже, если это потребуется для вызова. На данный момент вы можете попробовать код следующим образом:
+++++++++> number 1
++++< number 2
XOR, 221
Результат записывается в ячейку 10, указатель заканчивается в ячейке 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[>[-<->]<[->+<]]>[[-]<<<[->+>-<<
]>[-<+>]+>+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
И, 209
Результат записывается в ячейку 10, указатель заканчивается в ячейке 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->[->+<]<]>[-]>[-<<<[->+>-<<]>[-<+>]+>++
+++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
ИЛИ 211
Результат записывается в ячейку 10, указатель заканчивается в ячейке 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[->+<]>[[-]<<<[->+>-<<]>[-<+>]+>
+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
Поверните налево, 38
Результат записывается в ячейку 1, указатель заканчивается в ячейке 4
[->++>+<[>-]>[->>+<]<<<]>>>>[-<<<+>>>]
НЕ, 7
Результат записывается в ячейку 1, указатель заканчивается в ячейке 0
+[+>+<]
Объяснение:
XOR, AND и OR работают одинаково: вычислите n / 2 для каждого числа и запомните n mod 2. Рассчитайте логическое XOR / AND / OR для отдельных битов. Если результирующий бит установлен, добавьте 2 ^ n к результату. Повторите это 8 раз.
Это макет памяти, который я использовал:
0 1 2 3 4 5 6 7
n1 | n2 | marker | n/2 | 0 | counter | bit1 | bit2 |
8 9 10
temp | temp | result
Вот источник для XOR (числа указывают, где находится указатель в то время):
>>>>>
++++ ++++ 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
]
<<<
]
Для левого поворота снова есть маркер в ячейке 2, чтобы определить, равен ли 2n нулю, поскольку вы можете только определить, является ли ячейка ненулевой напрямую. Если это так, бит переноса записывается в ячейку 4, а затем добавляется к 2n. Это макет памяти:
0 1 2 3 4
n | 2n | marker | 0 | carry