campo de bits


Un campo de bits es una estructura de datos que consta de uno o más bits adyacentes que se han asignado para propósitos específicos, de modo que cualquier bit o grupo de bits dentro de la estructura se pueda configurar o inspeccionar. [1] [2] Un campo de bits se usa más comúnmente para representar tipos integrales de ancho de bits fijo conocido, como booleanos de un solo bit .

El programador determina el significado de los bits individuales dentro del campo; por ejemplo, el primer bit en un campo de bits (ubicado en la dirección base del campo ) a veces se usa para determinar el estado de un atributo particular asociado con el campo de bits. [3]

Dentro de las CPU y otros dispositivos lógicos, las colecciones de campos de bits llamadas banderas se usan comúnmente para controlar o indicar el resultado de operaciones particulares. [4] Los procesadores tienen un registro de estado que se compone de banderas. Por ejemplo, si el resultado de una suma no se puede representar en el destino, se establece un desbordamiento aritmético . Las banderas se pueden usar para decidir operaciones posteriores, como instrucciones de salto condicional . Por ejemplo, una instrucción (Jump if Equal) en el lenguaje ensamblador x86 dará como resultado un salto si alguna operación anterior estableció el indicador Z (cero) .JE ...

Un campo de bits se distingue de una matriz de bits en que este último se usa para almacenar un gran conjunto de bits indexados por números enteros y, a menudo, es más ancho que cualquier tipo integral compatible con el lenguaje. [ cita requerida ] Los campos de bits, por otro lado, típicamente caben dentro de una palabra de máquina , [3] y la denotación de bits es independiente de su índice numérico. [2]

Los campos de bits se pueden usar para reducir el consumo de memoria cuando un programa requiere una cantidad de variables enteras que siempre tendrán valores bajos. Por ejemplo, en muchos sistemas, almacenar un valor entero requiere dos bytes (16 bits) de memoria; a veces, los valores que se almacenarán solo necesitan uno o dos bits. Tener varias de estas pequeñas variables compartiendo un campo de bits permite un empaquetamiento eficiente de datos en la memoria. [5]

En C y C++, los campos de bits definidos por la implementación nativa se pueden crear utilizando int sin firmar, int con signo o (en C99:) _Bool. En este caso, el programador puede declarar una estructura para un campo de bits que etiqueta y determina el ancho de varios subcampos. [6] Los campos de bits del mismo tipo declarados adyacentemente pueden ser empaquetados por el compilador en un número reducido de palabras, en comparación con la memoria utilizada si cada 'campo' fuera declarado por separado.