As rotações bit a bit são mais lentas que as alterações no CPU Intel atual?
Eu estava curioso sejava.lang.Integer.rotateLeft
é otimizado usando uma instrução de rotação e escreveu um benchmark para isso. Os resultados foram inconclusivos: foram muito mais rápidos do que dois turnos, mas um pouco mais lentos que um único. Então eu reescrevi em C ++ e obtive os mesmos resultados. Ao compilar viag++ -S -Wall -O3
Eu posso ver a instrução nomontador gerado. Meu processador é o Intel Core i5.
oreferência é bastante longo e certamente não é o melhor pedaço de código, mas não acho que esteja quebrado. Ou é? De acordo com a documentação, as rotações levam um ciclo, exatamente como os turnos. Alguém pode explicar os resultados?
rotations: 6860
shift: 5100
As duas primeiras respostas estão erradas. Tanto o gcc quanto o java's JIT conhecem as instruções de rotação e as utilizam. Sobre o gcc veja o link acima, sobre java veja meubenchmark de java e seus resultados
benchmark ns linear runtime
Rotate 3.48 ====================
NonRotate 5.05 ==============================
Shift 2.16 ============