【发布时间】:2008-12-14 16:41:28
【问题描述】:
这是my question yesterday的后续行动:
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 处理这个问题的方式会有所不同?
【问题讨论】: