Para estar en la misma página, supongamos sizeof (int) = 4 y sizeof (long) = 8.¿Cambio de bits eficiente una variedad de int?
Dada una matriz de números enteros, ¿cuál sería un método eficiente para cambiar lógicamente la matriz a la izquierda o a la derecha?
Estoy contemplando una variable auxiliar, como una larga, que calculará el cambio de bits para el primer par de elementos (índice 0 y 1) y establecerá el primer elemento (0). Continuando de esta manera, el cambio de bits para elementos (índice 1 y 2) será computadora, y luego se establecerá el índice 1.
Creo que este es en realidad un método bastante eficiente, pero hay inconvenientes. No puedo desplazar bits más de 32 bits. Creo que usar varias variables auxiliares funcionaría, pero estoy visualizando la recursión en algún lugar de la línea.
@nn - no está nada claro qué es lo que buscas aquí. ¿Qué desea hacer con los datos que se desplazan y pierden? ¿Desea desplazar lógicamente o modificar datos aritméticamente? ¿O solo después de leer una selección de bits de datos binarios al azar? Por ejemplo, lea un byte de 4 bytes desde el bit de posición 27 al bit 59 desde un flujo de datos binarios de 100 bytes. – ChrisBD
@ChrisBD: Lo siento, buena pregunta. Lógicamente cambio. En realidad, estoy manipulando enteros grandes representados como una matriz de enteros, donde cada int corresponde a un dígito en la base 2^(sizeof (int) * 8) = 2^32. – snap
He estado buscando algunas referencias de wizzardry poco y no he visto ningún truco para esto, supongo que la manera obvia es la única manera: -/ – fortran