Битовые поля на С/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);
};
};