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