Ano, to je samozřejmě další důvod, proč nejde zaměňovat pow a shift... Nicméně tady není problém s double ani s přesností:
pow(63): 9.223372036854776E18
shift(63): -9.223372036854776E18
Tak tohle je čistě problém Javy. V Pythonu mají integery nekonečnou přesnost. Při posunu se nic neztrácí.
Nejde o to, ze by sa nieco stracalo, ale long v jave je signed a pouziva dvojkovy doplnok.
Navic 63 je int a u toho je konstanta pro posun nejdrive maskovana 0x1f, tedy napriklad 1<<64 == 1>>64 == 1
(omlouvam se, ze pouzivam hexadecimalni cisla, to je asi dneska taky uz prezitek?