Что означает BIT () в этом макросе ядра Linux? - PullRequest
0 голосов
/ 13 июня 2018

Я просматривал код ядра Linux и в файле hid.h макрос HID_QUIRK_ALWAYS_POLL определяется как:

#define HID_QUIRK_ALWAYS_POLL   BIT(10)

Что означает BIT(10)?Я не очень знаком с C, но из того, что я знаю (и исследовал), нет такой функции манипуляции с битами.

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

BIT - это макрос, определенный в include/linux/bitops.h в дереве ядра:

#define BIT(nr)         (1UL << (nr))

Таким образом, BIT (10) - это, в основном, беззнаковый long с установленным десятым битом.

0 голосов
/ 13 июня 2018

выглядит так, как будто вы можете найти ответ внутри первого включенного файла заголовка, т.е. bitops.h !

#define BIT(nr) (1UL << (nr))

т.е. BIT определяет битовую маску для указанного количества битот 0 (младший значащий или самый правый бит) до любого значения, которое вписывается в беззнаковый длинный.
Таким образом, BIT(10) должно получить числовое значение 1024 (то есть 1 << 10).

0 голосов
/ 13 июня 2018

Макрос BIT сдвигает значение 1 влево на указанное ему значение, поэтому BIT(10) == (1 << (10)).Может использоваться для получения определенного логического значения из битового поля.

...