Das ist ein völlig richtiges Verhalten und ist der Darstellung von Integerzahlen als
Zweierkomplement geschuldet, Dein Endergebnis ist
uint64($8000000000000000). Das gleiche tritt bei kleineren Datentypen auf, zB. bleibt
longint($80000000) bei 32-Bit-Negation unverändert.