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