Conceptos básicos de manipulación de bits para la programación c
Un puñado de operadores de programación C proporciona la manipulación de datos en el nivel binario. Los operadores son fáciles de ignorar, pero sólo cuando su verdadero poder y utilidad no son apreciadas.
El ~ y! operadores
Dos operadores binarios infrecuentes son la ~ (o 1 de complemento) y el! (o no). Ellos carecen del encanto de los operadores de bits lógicos, pero tienen un lugar.
Operador de complemento a 1 voltea todos los bits en un valor, convirtiendo un 1 a un 0 y un 0 en un 1. Por ejemplo:
~ 01010011 = 10101100
Los ! (NO) operador afecta a todo el valor - todos los bits. Cambia cualquier valor distinto de cero a 0, y el valor 0 a 1:
!01010011 = 00000000! 00000000 = 00000001
Cero y 1 son los dos únicos resultados posibles cuando se utiliza el bit a bit! operador.
Tanto el ~ y! operadores son unario operadores - simplemente prefijo de un valor para obtener los resultados.
Operador | Nombre | Escribe | Acción |
---|---|---|---|
Y | Bitwise | Máscaras pedacitos, restablecer algunos bits a 0 y dejando el restalone | |
| | Oregón | Bitwise | Establece los bits, el cambio de bits específicos de 0 a 1 |
^ | XOR | Bitwise | Cambia bits a 0 cuando empareja- de otro modo, a 1 |
~ | El complemento a 1 | Unario | Invierte todos los bits |
~ | NO | Unario | Cambia los valores distintos de cero a 0- 0 valores, a 1 |
los Binbin () función |
Dos declaraciones explican lo que está pasando en la función Binbin () para que sea convertir valores en una cadena binaria:
bin [x] = n 0x80? '1': '0'-n lt; lt; = 1-
La primera declaración realiza un AND máscara con el valor n. Todos menos el bit más a la izquierda en el número se descarta. Si ese bit está establecido, lo que hace que sea una condición TRUE, el carácter 1 se almacena en el array- de lo contrario, el carácter 0 se almacena.
El valor se expresa como 0x80, que es la notación hexadecimal, un tipo de taquigrafía para binario. El valor hexadecimal 0x80 es igual a 10000000 binario, que es la y la máscara. Si el valor es de 16 bits en lugar de 8, 0x8000 se utiliza en lugar, lo que crea una máscara binaria de 16 bits.
La segunda declaración desplaza los bits en el valor n una muesca a la izquierda. Como los espines de asa, que trabajan a través del valor n, otro bit en el valor se desplaza a la posición más a la izquierda. Se evalúa que poco, y la cadena binaria es construido por la inserción de un '1' o '0'.