able ▁version ▁of ▁P J W ▁hash ▁algorithm ▁that ▁had ▁a ▁bug ▁and ▁ended ▁up ▁in ▁several ▁text books , ▁as ▁the ▁author ▁of ▁one ▁of ▁these ▁text books ▁later ▁admitted . ▁ ▁Algorithm ▁P J W ▁hash ▁algorithm ▁involves ▁sh ifting ▁the ▁previous ▁hash ▁and ▁adding ▁the ▁current ▁byte ▁followed ▁by ▁moving ▁the ▁high ▁bits : ▁▁ ▁algorithm ▁P J W _ hash ( s ) ▁is ▁▁▁▁▁ ▁uint ▁h ▁:= ▁ 0 ▁▁▁▁▁ ▁bits ▁:= ▁uint ▁size ▁in ▁bits ▁▁▁▁▁ ▁for ▁i ▁:= ▁ 1 ▁to ▁| S | ▁do ▁▁▁▁▁▁▁▁▁ ▁h ▁:= ▁h ▁<< ▁bits / 8 ▁+ ▁s [ i ] ▁▁▁▁▁▁▁▁▁ ▁high ▁:= ▁get ▁top ▁bits / 8 ▁bits ▁of ▁h ▁from ▁left ▁▁▁▁▁▁▁▁▁ ▁if ▁high ▁ ≠ ▁ 0 ▁then ▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁h ▁:= ▁h ▁x or ▁( high ▁>> ▁bits ▁* ▁ 3 / 4 ) ▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁h ▁:= ▁h ▁& ▁~ high ▁▁▁▁▁ ▁return ▁h ▁ ▁Im plementation ▁Below ▁is ▁the ▁algorithm ▁implementation ▁used ▁in ▁UN IX ▁EL F ▁format : ▁ ▁unsigned ▁long ▁El f Hash ▁( ▁const ▁unsigned ▁char ▁* s ▁) ▁{ ▁▁▁▁ ▁unsigned ▁long ▁▁ ▁h ▁= ▁ 0 , ▁high ; ▁▁▁▁ ▁while ▁( ▁* s ▁) ▁▁▁▁ ▁{ ▁▁▁▁▁▁▁▁ ▁h ▁= ▁( ▁h ▁<< ▁ 4 ▁) ▁+ ▁* s ++; ▁▁▁▁▁▁▁▁ ▁if ▁( ▁high ▁= ▁h ▁& ▁ 0 x F 0 0 0 0 0 0 0 ▁) ▁▁▁▁▁▁▁▁▁▁▁▁ ▁h ▁^ = ▁high ▁>> ▁ 2 4 ; ▁▁▁▁▁▁▁▁ ▁h ▁&= ▁~ high ; ▁▁▁▁ ▁} ▁▁▁▁ ▁return