Это является продолжением до my question yesterday:побитовое Вычитание в Python
CMS любезно предоставил этот пример использования битовых операторов для сложения двух чисел в C:
#include<stdio.h>
int add(int x, int y) {
int a, b;
do {
a = x & y;
b = x^y;
x = a << 1;
y = b;
} while (a);
return b;
}
int main(void){
printf("6 + 3 = %d", add(6,3));
printf("6 - 3 = %d", add(6,-3));
return 0;
}
Он отлично работает, а затем я портировал это на Python следующим образом:
def add(x, y):
while True:
a = x & y
b = x^y
x = a << 1
y = b
if a == 0:
break
return b
print "6 + 3 = %d" % add(6,3)
print "6 - 3 = %d" % add(6,-3)
Они оба работают для добавления, а программа C также работает для вычитания. Однако программа Python вводит бесконечный цикл для вычитания. Я пытаюсь разобраться в этом и разместил программу здесь для дальнейших экспериментов: http://codepad.org/pb8IuLnY
Может ли кто-нибудь посоветовать, почему существует разница между тем, как C обрабатывает это и способ, которым обрабатывает CPython?
Благодарим за информацию. Означает ли это, что побитовое вычитание невозможно? Все, что я читал в Интернете, предлагает превратить его в побитовую проблему с добавлением второго дополнения второго операнда. – user23126 2008-12-14 17:12:19
Я думаю, вам нужно будет изменить поведение оператора сдвига слева, см. Мой отредактированный ответ. – 2008-12-14 17:33:50