3

我有一个二进制数(例如 111001001)。我正在尝试获取最后 5 位数字(01001)。我怎样才能做到这一点?我想将每个数字存储到一个数组中,然后使用 for 循环获取值。但是有没有更好的方法?

4

3 回答 3

11

您可以通过掩码获得最后 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
    }
}

(注意:这种情况下不需要先屏蔽。)

于 2013-10-24T09:54:24.750 回答
10

只需使用位掩码:

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。这有效地允许您控制要从值中保留的位。

于 2013-10-24T09:54:22.557 回答
1

答案是number & 31

31=11111二进制

于 2013-10-24T09:54:35.457 回答