Làm cách nào để thao tác XOR (trên hai bit int 32) chỉ được thực hiện bằng cách sử dụng các phép tính số học cơ bản? Bạn có phải làm điều đó bitwise sau khi chia cho mỗi quyền lực của 2 lần lượt, hoặc là có một phím tắt? Tôi không quan tâm đến tốc độ thực thi quá nhiều về mã đơn giản nhất, ngắn nhất.Làm thế nào để bạn thực hiện XOR bằng cách sử dụng + - * /?
Chỉnh sửa: Đây không phải là bài tập về nhà, mà là câu đố đặt ra trên hacker.org. Vấn đề là để thực hiện XOR trên một máy ảo dựa trên stack với các hoạt động rất hạn chế (tương tự như ngôn ngữ brainfuck và có - không có thay đổi hoặc mod). Sử dụng VM đó là một phần khó khăn, mặc dù tất nhiên là dễ dàng hơn bởi một thuật toán ngắn và đơn giản.
Trong khi giải pháp của FryGuy là thông minh, tôi sẽ phải đi với lý tưởng ban đầu của tôi (tương tự như giải pháp của litb) vì so sánh khó sử dụng trong môi trường đó.
bạn có nhớ chuyển đổi và toán tử mô đun không? – kenny
x << a === x * (1 << a) x >> a === x/(1 << a) – FryGuy
Nghe giống như một bài tập về nhà. Tôi đã luôn luôn coi nó là một thực hành tốt nhất để trích dẫn bất kỳ tài liệu tham khảo bên ngoài, nhưng nó sẽ được khá brazen để trích dẫn câu hỏi của riêng bạn trên stackoverflow. Thật là một tiến thoái lưỡng nan về đạo đức. –