Битовые поля на С/C++

Работа с отдельными битами числа

Побитные операции:

Таблица истинности И:

  0 1
0 0 0
1 0 1

Таблица истинности ИЛИ:

  0 1
0 0 1
1 1 1

Структура для удобной работы с битами числа:

struct BF { // BitField
  unsigned int data; // Данные
  int get(int i){ // Получить значение i-ого бита 
    // Обьединяем с битовой маской, в которой установлен только нужный бит 
    // И потом сдвигаем результат на bit разрядов вправо
    return (data & (1 << i)) >> i;
  };
  void set(int i, int value){ // Установить значение value в бит с номером i
    // Очищаем нужный бит и объединяем его по принципу ИЛИ с числом в котором все нули, а i-ый бит - value
    data = (data & ~(1 << i)) | (value << i);
  };
};