установить целочисленное значение в качестве битовой маски - PullRequest
4 голосов
/ 21 мая 2010

Какой самый простой способ присвоить битовую маску целочисленному значению? Например, я хочу, чтобы целое число с первым, третьим и четвертым битами = 1, другое = 0.

Конечно, я ищу код, а не одно значение! И, конечно, есть много возможностей, но я пытаюсь найти самый простой и описательный вид

Ответы [ 6 ]

9 голосов
/ 21 мая 2010

Я думаю, что лучший способ думать (!) - просто индексировать биты от 0, а затем применить «для установки n: th бита, побитового ИЛИ со значением (1 << n)»: </p>

int first_third_and_fourth = (1 << 0) | (1 << 2) | (1 << 3);
7 голосов
/ 21 мая 2010

Если вы хотите, чтобы ваш код читался в терминах битовых чисел, может пригодиться что-то вроде этого:

#define b0  0x0001
#define b1  0x0002
#define b2  0x0004
#define b3  0x0008
#define b4  0x0010
:
#define b15 0x8000

int mask = b3|b2|b0;

Но через некоторое время вы сможете определить, какие шестнадцатеричные значения относятся к каким битам, и вам не понадобятся такие мнемонические трюки:

int mask = 0x000d;
2 голосов
/ 21 мая 2010

Используйте битовый оператор ИЛИ (|) для объединения битов:

#define FIRST_BIT (0x1)
#define SECOND_BIT (0x2)
#define THIRD_BIT (0x4)
#define FOURTH_BIT (0x8)
/* Increase by for each bit, *2 each time, 
   0x prefix means they're specified via a hex value */

int x = FIRST_BIT | THIRD_BIT | FOURTH_BIT;

И вы можете проверить, установлен ли бит, используя оператор AND Bitwise (&):

int isset = x&FIRST_BIT;
1 голос
/ 21 мая 2010

Это должно сделать это:

int x = 0x0D;

И если вам повезло использовать gcc и вам не нужно быть переносимым:

int x = 0b1101;
0 голосов
/ 21 мая 2010

Do

int something = 0x00000001 * 2;

пока не доберешься до нужного места.

0 голосов
/ 21 мая 2010

Вот онлайн-конвертер битов, если вы не хотите делать сумму самостоятельно:

http://www.binaryconvert.com/convert_unsigned_int.html

Просто заполните приведенные ниже биты (например, 1101) и вычислите ответ (например, 0x0000000D). Любой способный калькулятор должен уметь делать то же самое ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...