Operações bit a bit

A biblioteca de operações bit a bit contém um conjunto de funções macro para realizar manipulações de bits típicas. Estas são usadas pelo resto da biblioteca e podem ser usadas em qualquer lado. Como as funções macro não têm tipo podem ser usadas com qualquer tipo.

O indíce do bit é usado para especificar o bit no número binário. Os indíces contam-se a partir de zero, em que este representa o bit menos significativo (LSB). Por exemplo, um número de 8 bits tem 8 bits com indíces de 0 até 7 e um número de 16 bits tem indíces de 0 até 15.

Funções

  • bit_mask(bit)

Conversão de indíce de bit para uma máscara. Parâmetros:

  • bit - Indíce do bit.
  • Devolve a máscara do bit.
  • bit_set(value, bit)

Define um bit específico numa variável. Parâmetros:

  • value - Variável.
  • bit - Indíce do bit.
  • bit_clear(value, bit)

Limpa um bit específico numa variável. Parâmetros:

  • value - Variável.
  • bit - Indíce do bit.
  • bit_set_to(value, bit, state)

Define um bit específico numa variável para um estado desejado. Parâmetros:

  • value - Variável.
  • bit - Indíce do bit.
  • state - Estado (true ou false).
  • bit_invert(value, bit)

Inverte um bit específico numa variável. Parâmetros:

  • value - Variável.
  • bit - Indíce do bit.
  • bit_is_set(value, bit)

Verifica se um bit específico numa variável está ou não definido. Parâmetros:

  • value - Variável.
  • bit - Indíce do bit.
  • Devolve valor booleano true quando o bit está definido e false quando o mesmo está limpo.
  • bit_is_clear(value, bit)

Verifica se um bit específico numa variável está ou não limpo. Parâmetros:

  • value - Variável.
  • bit - Indíce do bit.
  • Devolve valor booleano true quando o bit está limpo e false quando o mesmo está definido.

Exemplo

Definir o terceiro bit na variável de 8 bits b e inverter o último bit.

#include <homelab/bit.h>
 
int main(void)
{
	unsigned char b = 0x00;
 
	bit_set(b, 2);
	bit_invert(b, 7);
}

Source

Mostra-se de seguida uma versão curta do código fonte da biblioteca de operações bit a bit.

//
// Functions for handling bits.
//
#define bit_mask(bit)            (1 << (bit))
#define bit_set(value, bit)      value |= bit_mask(bit)
#define bit_clear(value, bit)    value &= ~bit_mask(bit)
#define bit_invert(value, bit)   value ^= bit_mask(bit)
#define bit_is_set(value, bit)   ((value) & (bit_mask(bit)))
#define bit_is_clear(value, bit) (!((value) & (bit_mask(bit))))
#define bit_set_to(v, b, x) v = ((x) ? (v | bit_mask(b)) : (v & ~bit_mask(b)))
 
//
// Functions for handling bit masks.
//
#define bitmask_set(value, bitMask)     value |= (bitMask)
#define bitmask_clear(value, bitMask)   value &= ~(bitMask)
#define bitmask_invert(value, bitMask)  value ^= (bitMask)
#define bitmask_set_to(v, m, x)         v = ((x) ? (v | (m)) : (v & ~(m))) 
#define bitmask_is_set(value, bitMask)  ((value) & (bitMask))
pt/software/homelab/library/bit.txt · Last modified: by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0