Tengo un entero de 64 bits, que necesito girar 90 grados en un área de 8 x 8 (preferiblemente con manipulación directa de bits). No puedo encontrar ningún algoritmo útil para eso. Por ejemplo, esto:Rotar un mapa de bits 90 grados
// 0xD000000000000000 = 1101000000000000000000000000000000000000000000000000000000000000
1 1 0 1 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
después de la rotación se convierte en esto:
// 0x101000100000000 = 0000000100000001000000000000000100000000000000000000000000000000
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Me pregunto si hay alguna solución sin necesidad de utilizar ninguna tabla hash (s) calculada de antemano?
Dudo que haya una forma de hacer esto con solo un poco de manipulación (& | ~ << etc) las respuestas a continuación que implican bucles anidados son probablemente su mejor opción. –
Haz que la palabra "entero" aparezca en negrita y enfatiza el hecho de que no se trata de una matriz, por lo que todos verán ese hecho de inmediato en lugar de escribirlo como un comentario para cada respuesta. – Shaihi
Shaihi: Buena idea. – nhaa123