А очень простая и старая техника является просто определить количество #define переменных, значения которых соответствуют расположению битов, а затем использовать AND и OR операции для удаления или установки при необходимости. , например.
#define BIT_0 0x0001
#define BIT_1 0x0002
#define BIT_2 0x0004
#define BIT_3 0x0008
#define BIT_4 0x0010
Затем вы используете их для установки местоположений бит в стандартной переменной, например.
int someVariable = 0;
someVariable = someVariable | BIT_1; //set bit 1 to 1. someVariable = 2
someVariable = someVariable & ~BIT_1; // clear bit 1. someVariable = 0
Неэффективный или умный, но легко читаемый.
редактировать - добавил Если вы хотите ограничить, какие биты действительны для использования, то установка значения масок применяются следующим образом:
#define VALID_BIT_MASK 0x0009 // thus only bits 3 and 0 are valid
В качестве примера
someVariable = someVariable | BIT_0 | BIT_2 | BIT_4; // someVariable now has value 21
someVariable = someVariable & VALID_BIT_MASK; // remove invalid bits, someVariable value is now 1
Очевидно someVariable будет байтом, unsigned int или unsigned long, но скажите, что вы хотите только 11 бит набора unsigned int (16 бит).
#define VALID_BIT_MASK 0x07FF; // 011111111111 in binary.
someVariable = someVariable & VALID_BIT_MASK; //strips off unwanted bits.
@SysAdmin .... Да, конечно – maddy