Получить последние 5 двоичных разрядов из двоичного числа?
У меня есть двоичное число (например, 111001001). Я пытаюсь получить последние 5 цифр (01001). Как я могу это сделать? я думал сохранить каждую цифру в arrray, а затем получить значения с помощью цикла for. Но есть ли лучший способ?
3 ответа:
Вы можете получить только последние 5 битов, маскируя:
x = x & 0x1f;
Если вы хотите обработать каждый из этих битов, то вы можете проверить их по отдельности в цикле, например
for (i = 0; i < 5; ++i) { if (x & (1 << i)) // if bit i is set { // do something for bit i = 1 } else { // do something else for bit i = 0 } }
(Примечание: в этом случае нет необходимости сначала маскироваться.)
Просто используйте битовую маску:
int val = value & 0x1F;
Пояснение:
1 1100 1001 ---> your value 0 0001 1111 ---> the bitmask 1 F ---> hexadecimal equivalent of the bitmask ----------- & 0 0000 1001 ---> value & bitmask
Бинарная операция & (AND) имеет следующую таблицу истинности:
┌─────╥───┬───┐ │ A&B ║ 0 │ 1 │ ╞═════╬═══╪═══╡ │ 0 ║ 0 │ 0 │ ├─────╫───┼───┤ │ 1 ║ 0 │ 1 │ └─────╨───┴───┘
Только биты, которые равны 1 в значении и битовой маске, становятся 1 в результате. Это эффективно позволяет вам контролировать, какие биты вы хотите сохранить от значения.