Tôi cần phải so sánh hai số và tìm những điểm giống nhau trong các bit quan trọng hơn. Tôi đang cố gắng xác định số bit có ý nghĩa ít nhất khác nhau.Làm cách nào để xác định số bit tương tự?
10111000
10111011
184 và 187 yêu cầu bù trừ hai, vì chỉ có hai bit có ý nghĩa nhất khác nhau.
10111011
11111011
187 và 251 yêu cầu bù đắp bảy, vì bit thứ bảy ít quan trọng nhất khác nhau.
Ý tưởng đầu tiên của tôi là XOR các số với nhau, sau đó chuyển bit sang phải cho đến khi số bằng 0. Tôi cảm thấy như có một giải pháp khôn ngoan hơn cho điều này mà không liên quan đến vòng lặp, nhưng tôi đã không làm đủ bit-twiddling của riêng tôi để đến với nó.
Giải pháp cần làm việc cho bất kỳ 64 bit nào, vì số của tôi đang được lưu trữ dưới dạng UInt64
. Điều này đang được viết bằng C#, nhưng giải pháp rất có thể là ngôn ngữ bất khả tri.
11101101
11010101
Sẽ cần một bù đắp của 6 bit. Tôi đang cố gắng tìm ra bao nhiêu bit tương tự mà tôi có thể lấy ra khỏi đầu.
Giải quyết tốt vấn đề, nhưng không rõ ràng kết quả sẽ là gì trong trường hợp, ví dụ: số 11101101 và 11010101 (nghĩa là có sự khác biệt về nhiều vị trí). –
với thay đổi bằng 1 trong vòng lặp, bạn thậm chí không cần phải xor chúng - thay vì so sánh với 0 bạn có thể thay đổi cho đến khi chúng bằng – doc
@Eugene - Tôi đã thêm ví dụ của bạn. @doc - Đúng, nhưng đó vẫn là những gì tôi đang cố gắng tránh. Tôi chỉ biết XORing là đúng hướng .. – dlras2