Получить последние 5 двоичных разрядов из двоичного числа?


У меня есть двоичное число (например, 111001001). Я пытаюсь получить последние 5 цифр (01001). Как я могу это сделать? я думал сохранить каждую цифру в arrray, а затем получить значения с помощью цикла for. Но есть ли лучший способ?

3 3

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 в результате. Это эффективно позволяет вам контролировать, какие биты вы хотите сохранить от значения.

Ответ таков: number & 31.

31 = 11111 в двоичном виде