从二进制数中获取最后5位二进制位?

时间:2013-10-24 09:52:27

标签: c

我有一个二进制数字(例如111001001)。我想获得最后5位数(01001)。我怎样才能做到这一点?我想将每个数字存储到arrray然后用for循环获取值。但还有更好的方法吗?

3 个答案:

答案 0 :(得分:10)

您可以通过屏蔽获取最后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
    }
}

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

答案 1 :(得分:9)

只需使用位掩码:

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

二进制&amp; (AND)操作具有以下真值表:

┌─────╥───┬───┐
│ A&B ║ 0 │ 1 │
╞═════╬═══╪═══╡
│  0  ║ 0 │ 0 │
├─────╫───┼───┤
│  1  ║ 0 │ 1 │
└─────╨───┴───┘

只有值为1的位和位掩码在结果中变为1。 这有效地允许您控制要保留哪些位。

答案 2 :(得分:0)

答案是number & 31

二进制

31 = 11111