有人告诉我(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位清零。