Ceci est un suivi de my question yesterday:soustraction Bitwise en Python
CMS a aimablement fourni cet exemple d'utilisation opérateurs de bits pour additionner deux nombres en 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;
}
Il fonctionne très bien et je puis porté Python à Python comme suit:
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)
Ils travaillent tous les deux pour l'addition et le programme C fonctionne également pour la soustraction. Cependant, le programme Python entre dans une boucle infinie pour la soustraction. J'essaye d'aller au fond de ceci et ai posté le programme ici pour plus d'expérimentation: http://codepad.org/pb8IuLnY
Quelqu'un peut-il conseiller pourquoi il y aurait une différence entre la façon dont C gère ceci et la façon dont CPython gère ceci?
Merci pour l'info. Cela signifie-t-il que la soustraction de bits n'est pas possible? Tout ce que j'ai lu en ligne suggère de le transformer en un problème d'addition binaire en prenant le complément à deux du deuxième opérande. – user23126
Je pense que vous devriez changer le comportement de l'opérateur de gauche, voir ma réponse éditée. –
Le décalage vers la gauche est défini en termes de multiplication en Python (http://docs.python.org/reference/expressions.html#shifting-operations) donc je pense que vous devrez trouver une autre approche si vous voulez que cela fonctionne avec des nombres négatifs . –