有人告诉我(i >> 3) is faster than (i/8),但找不到有关>>的任何信息。有人可以指出指向我的链接吗?

同一个人告诉我“int k = i/8,其次是k*8可以通过(i&0xfffffff8);更好地完成,”但Google仍然没有帮助...

感谢您的任何链接!

最佳答案

here所述,>>运算符只是i的位的按位移位。因此,将i向右移1位将导致整数除以2,而将3位移将导致除以2 ^ 3 = 8。

但是如今,这种除以2的幂进行除法的优化应该不再真正地进行了,因为编译器应该足够聪明才能自己执行此操作。

同样,按位与0xFFFFFFF8(1 ... 1000,最后3位0)等于将i舍入到最接近的8的倍数(就像(i/8)*8一样),因为它将i的最后3位清零。

10-07 16:34