h က ဒါရှိတယ်ထားပါတော့
h = 10101011 11001101 00010010 00110100
↑ high 16 bits ↑ low 16 bits
unsigned shift operation ကို 16 bits စာ ဘယ်ဘက်ကို ဆင်းခိုင်းလိုက်ရင် ရှေ့က bit တွေ အကုန် 0 ဖြစ်ကုန်မယ်။ ထိပ်က value တွေက lower bits တွေကို အစားထိုးသွားမယ်။
h >>> 16 = 00000000 00000000 10101011 11001101
အဲ.. ရလာတဲ့ အဲဒီ shifted high bits တွေကိုမှ နဂိုမူလ h ထဲမှာ ရှိတဲ့ bit တွေနဲ့ mix လုပ်တာပါ။
နဂို
h = 10101011 11001101 00010010 00110100'
ဘယ်ဘက် 16 bit ဆင်းပြီး
h >>> 16 = 00000000 00000000 10101011 11001101
သူတို့ နှစ်ခုကို XOR operation နဲ့ ရောလိုက်တာ။
h ^ h>>>16
Original: 1010101111001101 0001001000110100
Shifted: 0000000000000000 1010101111001101
-------------------------------------------
Result: 1010101111001101 1011100111111101
ဒီတော့ ပြောချင်တာက နဂို h ရဲ့ high bits တွေကို အနောက်ကို ပို့ပစ်လိုက်တယ်။ အဲဒီမှာ ရှေ့က bits(higher bits တွေ 0 ဖြစ်သွားတယ်။)
ပြီးတော့မှ အရှေ့ရော အနောက်ရောက bits တွေကို XOR operation နဲ့ ပြန်ထုတ်တယ်။ ဒါကတော့ HashMap မှာ index ထုတ်ဖို့ Bit Mixing လုပ်တာကို ရှင်းပြတာဖြစ်ပါတယ်။ နောက်တစ်ခန်းမှာတော့ Bucket တွေအကြောင်ပြောပြပါ့မယ်။
Top comments (0)