stringtranslate.com

Manipulación de bits

La manipulación de bits es el acto de manipular algorítmicamente bits u otros datos más cortos que una palabra . Las tareas de programación informática que requieren manipulación de bits incluyen control de dispositivos de bajo nivel, algoritmos de corrección y detección de errores , compresión de datos , algoritmos de cifrado y optimización . Para la mayoría de las demás tareas, los lenguajes de programación modernos permiten al programador trabajar directamente con abstracciones en lugar de bits que representan esas abstracciones.

El código fuente que manipula bits utiliza operaciones bit a bit : AND, OR, XOR, NOT y posiblemente otras operaciones análogas a los operadores booleanos; también hay cambios de bits y operaciones para contar unos y ceros, encontrar uno o cero alto y bajo, configurar, restablecer y probar bits, extraer e insertar campos, enmascarar y campos cero, reunir y dispersar bits hacia y desde posiciones o campos de bits específicos . Los operadores aritméticos de números enteros también pueden realizar operaciones de bits junto con los otros operadores.

La manipulación de bits, en algunos casos, puede obviar o reducir la necesidad de recorrer una estructura de datos y puede dar muchas veces más velocidad, ya que las manipulaciones de bits se procesan en paralelo.

Terminología

La manipulación de bits , la manipulación de bits , el ataque de bits y la gimnasia de bits a menudo se usan indistintamente con la manipulación de bits, pero a veces se refieren exclusivamente a formas o usos inteligentes o no obvios de la manipulación de bits, o a tareas tediosas o desafiantes de manipulación de datos de control de dispositivos de bajo nivel .

El término manipulación de bits data de los primeros hardware informáticos , donde los operadores de computadoras hacían ajustes modificando o manipulando los controles de la computadora. A medida que evolucionaron los lenguajes de programación de computadoras, los programadores adoptaron el término para referirse a cualquier manejo de datos que involucrara computación a nivel de bits .

Operación bit a bit

Una operación bit a bit opera en uno o más patrones de bits o números binarios al nivel de sus bits individuales . Es una acción rápida y primitiva respaldada directamente por la unidad central de procesamiento (CPU) y se utiliza para manipular valores para comparaciones y cálculos.

En la mayoría de los procesadores, la mayoría de las operaciones bit a bit son de un solo ciclo, sustancialmente más rápidas que la división, la multiplicación y las ramas. Si bien los procesadores modernos generalmente realizan algunas operaciones aritméticas y lógicas tan rápido como las operaciones bit a bit debido a sus canales de instrucciones más largos y otras opciones de diseño arquitectónico , las operaciones bit a bit comúnmente usan menos energía debido al uso reducido de recursos.

Ejemplo de manipulación de bits

Para determinar si un número es una potencia de dos, conceptualmente podemos dividir repetidamente un número entero entre dos hasta que el número no se divida uniformemente entre 2; si el único factor que queda es 1, el número original era una potencia de 2. Usando operadores lógicos y de bits, hay una expresión simple que devolverá verdadero (1) o falso (0):

bool esPowerOfTwo = ( x != 0 ) && (( x & ( x - 1 )) == 0 );             

La segunda mitad utiliza el hecho de que las potencias de dos tienen uno y sólo un bit establecido en su representación binaria:

x == 0...0 1 0...0x-1 == 0...001...1x & (x-1) == 0...000...0

Si el número no es cero ni una potencia de dos, tendrá '1' en más de un lugar:

x == 0... 1 ... 0 1 0... 0x-1 == 0... 1 ...001...1x & (x-1) == 0... 1 ...000...0

Si se utiliza código en lenguaje ensamblador en línea, entonces podría estar disponible una instrucción ( popcnt ) que cuenta el número de unos o ceros en el operando; un operando con exactamente un bit '1' es una potencia de 2. Sin embargo, dicha instrucción puede tener mayor latencia que el método bit a bit anterior.

Operaciones de manipulación de bits

Los procesadores normalmente proporcionan sólo un subconjunto de operadores de bits útiles. Los lenguajes de programación no soportan directamente la mayoría de las operaciones de bits, por lo que se deben utilizar modismos para codificarlas. El lenguaje de programación 'C', por ejemplo, proporciona sólo bits AND(&), OR(|), XOR(^) y NOT(~). Fortran proporciona AND(.and.), OR (.or.), XOR (.neqv.) y EQV(.eqv.). Algol proporciona extracción e inserción sintáctica de campos de bits. Cuando los lenguajes proporcionan operaciones de bits que no se asignan directamente a instrucciones de hardware, los compiladores deben sintetizar la operación a partir de los operadores disponibles.

Una operación de bits especialmente útil es contar los ceros a la izquierda que se utilizan para encontrar el bit de configuración alta de una palabra de máquina, aunque puede tener diferentes nombres en distintas arquitecturas. [1] No existe un lenguaje de programación simple, por lo que debe ser proporcionado por una rutina de biblioteca del sistema o intrínseca del compilador. Sin ese operador, es muy costoso (consulte Buscar el primer conjunto#CLZ ) realizar cualquier operación con respecto al bit alto de una palabra, debido a la propagación asimétrica de las operaciones aritméticas. Afortunadamente, la mayoría de las arquitecturas de CPU lo han proporcionado desde mediados de los años 1980. Una operación adjunta de recuento de unidades , también llamada POPCOUNT, que cuenta el número de bits establecidos en una palabra de máquina, también suele proporcionarse como operador de hardware. Las operaciones de bits más simples, como establecer, restablecer, probar y alternar bits, a menudo se proporcionan como operadores de hardware, pero se simulan fácilmente si no lo son; por ejemplo (SET R0, 1; LSHFT R0, i; OR x, R0) establece el bit i. en el operando x.

Algunas de las operaciones de bits más útiles y complejas que deben codificarse como modismos en el lenguaje de programación y sintetizarse por los compiladores incluyen:

Algunas operaciones aritméticas se pueden reducir a operaciones más simples y operaciones de bits:

Multiplicar por 9, por ejemplo, es copiar el operando, desplazarlo hacia arriba en 3 (multiplicar por 8) y sumarlo al operando original.

enmascaramiento

Una máscara son datos que se utilizan para operaciones bit a bit , particularmente en un campo de bits .

Usando una máscara, varios bits en un Byte , nibble , palabra (etc.) se pueden activar, desactivar o invertir de activado a desactivado (o viceversa) en una sola operación bit a bit. Las aplicaciones más completas del enmascaramiento, cuando se aplican condicionalmente a las operaciones, se denominan predicación .

Ver también

Referencias

  1. ^ En la mayoría de los chips Intel, es BSR (bitscan inverso), aunque los SoC más nuevos también tienen LZCNT (cuenta ceros a la izquierda)

Otras lecturas

enlaces externos