728x90
반응형
1, 2, 4, 8, 16... 과 같이 bitmask를 활용한 enum에서
forloop를
'++' 연산 대신
'<<=1' 연산을 통해 효율적으로 이용하는 예시
#define TU_BIT(n) (1UL << (n))
/// Keyboard modifier codes bitmap
typedef enum
{
KEYBOARD_MODIFIER_LEFTCTRL = TU_BIT(0), // 1UL <<(0) -> 1
KEYBOARD_MODIFIER_LEFTSHIFT = TU_BIT(1), // 1UL <<(1) -> 2
KEYBOARD_MODIFIER_LEFTALT = TU_BIT(2), // 1UL <<(2) -> 4
KEYBOARD_MODIFIER_LEFTGUI = TU_BIT(3), // 1UL <<(3) -> 8
KEYBOARD_MODIFIER_RIGHTCTRL = TU_BIT(4), // 1UL <<(4) -> 16
KEYBOARD_MODIFIER_RIGHTSHIFT = TU_BIT(5), // 1UL <<(5) -> 32
KEYBOARD_MODIFIER_RIGHTALT = TU_BIT(6), // 1UL <<(6) -> 64
KEYBOARD_MODIFIER_RIGHTGUI = TU_BIT(7) // 1UL <<(7) -> 128
} hid_keyboard_modifier_bm_t;
위와 같이 1부터(00000001) 128까지(10000000) bitmask shift 연산(<<=1)을 활용해서 순환
for (hid_keyboard_modifier_bm_t modifier = KEYBOARD_MODIFIER_LEFTCTRL; modifier <= KEYBOARD_MODIFIER_RIGHTGUI; modifier <<=1) {
printf("modifier: %x\n", modifier);
}
// modifier: 1
// modifier: 2
// modifier: 4
// modifier: 8
// modifier: 10
// modifier: 20
// modifier: 40
// modifier: 80
위와 같이 비트마스크 shift 연산을 통해서 순환이 가능
(16진수 표현 출력에 의해서 16 -> 10, 32-> 20, 64->40, 128-> 80 출력)
728x90
반응형
'C' 카테고리의 다른 글
버퍼 # buffer # memcpy # buffer overflow (0) | 2024.05.24 |
---|---|
C: #ifndef / likely(x) / unlikely(x) / __builtin_expect(!!(x), 1) (0) | 2024.05.02 |
C: function pointer (0) | 2024.04.30 |
C: designated initializer # Array # Structure # 초기화 (0) | 2024.04.29 |
C: union # struct (0) | 2024.04.26 |