2011-04-04 18 views
7

Conozco constantemente a personas que utilizan operadores bit a bit para hacer cosas rápidas, sencillas y elegantes. Me gustaría aprender algunos trucos útiles. ¿Cuáles son algunos de los casos de operador de bit a bit más útiles?¿Cuáles son algunas buenas maneras de aprovechar los operadores bit a bit?

+0

Creo que esto es demasiado amplio. Hay algunas buenas preguntas para casos específicos cuando busca [bithacks] (http://stackoverflow.com/search?q=bithacks). [Casos de uso del mundo real de operadores bit a bit] (http://stackoverflow.com/q/2096916/995714). https://graphics.stanford.edu/~seander/bithacks.html –

Respuesta

2

Aunque estoy de acuerdo con Michael McGowan, en general, un poco haciendo girar los cortes pueden ser muy útiles en ciertas situaciones, por ejemplo en la programación de hardware integrado, que no tiene toda la instrucciones usuales También he tenido un buen uso de tales técnicas cuando codifico programas en demostradores de teoremas como los solucionadores de SMT, que no admitían todas las operaciones que quería usar.

Mi primera parada cuando busco una solución bit a bit a un problema es el sitio bit twiddling hacks. Tiene bastantes fragmentos de código para muchas de las técnicas más comunes.

Luego está también el libro Hacker's Delight que cubre algunas técnicas de bits en profundidad.

0

Normalmente no es una buena idea usar tales trucos. Los compiladores modernos a menudo hacen este tipo de cosas detrás de escena cuando es posible. Dicho esto, a veces se tiene conocimiento de que el compilador no lo hace (tal vez que un valor particular esté garantizado en el tiempo de ejecución para ser un poder de 2). Si determina que es una buena idea probar tales trucos, here are useful bit twiddling hacks.

5

constante de tiempo de 2 exponenciación:

x = 1 << n; // x = pow(2, n) 
0

Siempre se puede hacer uso del operador de bits desviación a la izquierda (< <) a mutiply el número dado por 2.
Para Ex -

public class abc {public static void main (String[] arg) 
{ 
    int a = 650; 
    int doubleOfa = a<<1; 
    System.out.println(a); 
    System.out.println(doubleOfa); 

    } 
} 
Cuestiones relacionadas