Đây là một theo dõi để my question yesterday:Bitwise trừ bằng Python
CMS vui lòng cung cấp ví dụ này sử dụng toán tử Bitwise để thêm hai con số trong 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;
}
Nó hoạt động tuyệt vời và sau đó tôi chuyển nó đến Python như sau:
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ả hai đều hoạt động để bổ sung và chương trình C cũng hoạt động để trừ. Tuy nhiên, chương trình Python nhập vào một vòng lặp vô hạn cho phép trừ. Tôi đang cố gắng tìm hiểu điều này và đã đăng chương trình tại đây để thử nghiệm thêm: http://codepad.org/pb8IuLnY
Có ai có thể giải thích tại sao có sự khác biệt giữa cách xử lý C và cách xử lý CPython này?
Cảm ơn thông tin. Điều này có nghĩa là trừ bitwise là không thể? Tất cả mọi thứ tôi đã đọc trực tuyến cho thấy biến nó thành một vấn đề bổ sung bitwise bằng cách lấy bổ sung của hai toán hạng thứ hai. – user23126
Tôi nghĩ bạn cần thay đổi hành vi của toán tử dịch chuyển trái, xem câu trả lời đã chỉnh sửa của tôi. –
Sự dịch chuyển trái được định nghĩa về phép nhân trong Python (http://docs.python.org/reference/expressions.html#shifting-operations) vì vậy tôi nghĩ bạn sẽ cần phải tìm cách tiếp cận khác nếu muốn điều này làm việc với các số âm . –