位運算在linux核心或裸驅中使用十分常見,下面是兩種使用方式在此記錄:
對暫存器進行操作:
舉個例子,
1、清除bit8-bit10,並將bit8-bit10設定為0x2
reg = (reg & (~(0x7 << 8)) | (0x2 << 8));
2、將bit4置一和置零
reg = (reg & (~(0x1<<4))) | (0x0 << 4); // bit4置零 reg = (reg & (~(0x1<<4))) | (0x1 << 4); // bit4置一
實際應用:
#define BIT(nr) (1UL << (nr)) // 指定nr位置設定為1 #ifdef CONFIG_ARM64 #define BITS_PER_LONG 64 #else #define BITS_PER_LONG 32 #define GENMASK(h, l) \ (((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) // 生成一個位掩碼,其中引數h和l分別表示要設定為1的最高位和最低位的位置。