ja zdefiniował klasę:Python hash() nie obsługuje długiej liczby całkowitej?
class A: ''' hash test class >>> a = A(9, 1196833379, 1, 1773396906) >>> hash(a) -340004569 This is weird, 12544897317L expected. ''' def __init__(self, a, b, c, d): self.a = a self.b = b self.c = c self.d = d def __hash__(self): return self.a * self.b + self.c * self.d
Dlaczego w doctest, hash function() daje ujemną liczbą całkowitą?
Nitpick: (12544897317 & 0xFFFFFFFF) - (1 << 32) to nie -340004569; to jest -340004571. Python faktycznie dostaje się do 32-bitowej liczby przez * ponowne mieszanie *; tj. mieszanie obliczeniowe (12544897317). Jest to lepsze, ponieważ nie wyrzuca tylko bitów wyższego rzędu o oryginalnej wartości mieszania, ale zamiast tego miesza je w ostateczną wartość mieszania. –
@ Mark Dickinson, uh-huh, dziękuję – inv