Tôi đang làm bài tập về nhà, nơi chúng ta phải tạo một hàm gọi là isGreater (x, y) trả về nếu x lớn hơn y, nhưng chúng ta chỉ có thể sử dụng toán tử bitwise cùng với + và! Tôi đã giải quyết vấn đề, sử dụng quy tắc nếu x và y có các dấu hiệu khác nhau, sau đó x> = 0 và y < 0 hoặc nếu x và y có cùng dấu thì chỉ khi y-x là âm.Tại sao chức năng này lớn hơn chức năng?
Tuy nhiên, khi tôi nhìn xung quanh cách người khác giải quyết nó, tôi nhận thấy phương pháp sau đây hoạt động chính xác vì bất kỳ lý do gì.
y = ~y;
return !(((x&y) + ((x^y) >> 1)) >> 31);
Tôi không thể cho cuộc sống của tôi hiểu tại sao điều này hiệu quả, tôi thấy điều này có liên quan đến bit đầu tiên trong x không được đặt trong y hoặc gì đó?
Lưu ý: Rõ ràng đây chỉ là giải pháp hợp lệ nếu x và y là ints, không phải là unsigned int.
Được phép, cùng với! nhà điều hành. Giải pháp hoàn toàn hợp lệ. – jamiees2
Tôi xin lỗi, tôi đã phạm sai lầm khi không bao gồm + và! toán tử. – jamiees2
Nếu tôi không nhầm, nếu x là 1 và y là 1, điều này trả về 1. Vì vậy, chức năng được cho là 'isGreaterOrEqual (x, y)'? – indiv