tôi đang tìm kiếm thông qua một số các nguồn .net hôm qua và thấy một số hiện thực của GetHashCode với một cái gì đó dọc theo dòng này:Net GetHashCode Bit Chuyển Operation
(i1 << 5) + i^i2
Tôi hiểu những gì đang làm và tại sao . Điều tôi muốn biết là lý do tại sao họ sử dụng (i1 < < 5) + i thay vì (i1 < < 5) - i.
Hầu hết các khung tôi đã sử dụng -i vì nó tương đương với phép nhân với 31 là số nguyên tố, nhưng cách của Microsoft tương đương với số 33 với 11 và 3 là các thừa số và do đó không phải là số nguyên tố.
Có biện minh cho điều này không? Bất kỳ giả thuyết hợp lý nào?
Được rồi, tôi đã tìm ra lý do tại sao Microsoft sử dụng 33. Đó được gọi là Bernstein Hash. Nó chỉ ra rằng 33 có một số tính chất kỳ diệu mà sản xuất một phân phối tốt của mã băm và có rất ít kiến thức lý thuyết là tại sao. –