如何在JavaScript中模拟64位(无符号)整数的按位旋转?

Jef*_*eff 7 javascript bit-manipulation

我需要在JavaScript中执行64位整数的循环左移.然而:

  • JavaScript数字是双打的
  • 当你开始使用<<和>>以及>>>和〜以及所有比特繁琐的业务时,JavaScript会将它们转换为32位有符号的整数.然后,当你完成时,它又回到了双打.我认为.
  • 我不想要这个标志.而且我绝对不希望小数位.但我绝对想要64位.

那么,如何执行64位值的按位左旋转?

Dou*_*rie 12

将64位数字保持为单独的高低两半.当N <32时向左旋转N:

hi_rot = ((hi << N) | (lo >>> (32-N))) & (0xFFFFFFFF)

lo_rot = ((lo << N) | (hi >>> (32-N))) & (0xFFFFFFFF)

如果N> = 32,则从N中减去32,交换hi和lo,然后执行上述操作.