2010-01-25 22 views
27

Entiendo que las operaciones a nivel de bit son necesarias para mucha programación de bajo nivel, como escribir controladores de dispositivos, gráficos de bajo nivel, ensamblaje de paquetes de protocolo de comunicaciones y decodificación. He estado haciendo PHP durante varios años, y he visto operaciones bit a bit muy raramente en proyectos PHP.Operaciones a nivel de bit en PHP?

¿Me puede dar ejemplos de uso?

+0

muy poco en PHP utiliza operaciones bit a bit fuera de trucos de optimización, así como la configuración como http://php.net/manual/en/function.error-reporting.php –

+0

comprueban debajo de acoplamiento para más detalles http://www.phpchef.com/posts/php-bitwise-operators – Abutouq

Respuesta

46

Puede usarlo para máscaras de bits para codificar combinaciones de cosas. Básicamente, funciona dando a cada bit un significado, por lo que si tiene 00000000, cada bit representa algo, además de ser un único número decimal también. Digamos que tengo algunas preferencias para los usuarios que quiero almacenar, pero mi base de datos es muy limitada en términos de almacenamiento. Podría simplemente almacenar el número decimal y derivar de esto, qué preferencias se seleccionan, p. 9 es 2^3 + 2^0 es 00001001, por lo que el usuario tiene preferencia 1 y preferencia 4.

00000000 Meaning  Bin Dec | Examples 
│││││││└ Preference 1 2^0 1 | Pref 1+2 is Dec 3 is 00000011 
││││││└─ Preference 2 2^1 2 | Pref 1+8 is Dec 129 is 10000001 
│││││└── Preference 3 2^2 4 | Pref 3,4+6 is Dec 44 is 00101100 
││││└─── Preference 4 2^3 8 | all Prefs is Dec 255 is 11111111 
│││└──── Preference 5 2^4 16 | 
││└───── Preference 6 2^5 32 | etc ... 
│└────── Preference 7 2^6 64 | 
└─────── Preference 8 2^7 128 | 

Otras lecturas

+1

¿Qué tan bien esta escala si tiene que lidiar con un hipotético número grande/variable de preferencias? –

+0

¿Te refieres a speedwise o al número de preferencias posibles? El número máximo en un sistema operativo de 32 bits sería 31 preferencias para una sola máscara de bits. Sin embargo, puedes combinar varias máscaras de bits mediante matrices. Vea los comentarios en http://php.net/manual/en/language.operators.bitwise.php – Gordon

+0

Sí, un límite de 31 preferencias no es escalable en comparación con una matriz, ¿no es así? Supongo que puedes combinar las máscaras de bits, pero ¿será fácil depurar este código en comparación con una matriz? será mucho más rápido? –

17

Las operaciones a nivel de bit son extremadamente útiles en la información de credenciales. Por ejemplo:

function is_moderator($credentials) 
{ return $credentials & 4; } 

function is_admin($credentials) 
{ return $credentials & 8; } 

y así sucesivamente ...

De esta manera, podemos mantener un entero simple en una columna de base de datos para tener todas las credenciales en el sistema.

Cuestiones relacionadas