如何在C ++中获得char的最低3位?

时间:2013-02-03 11:56:52

标签: c++ bit-manipulation

以下文字是我在一篇文档中坚持的内容。

  

数组的第一个char的最低3位表示是否   它是AB。如果3位为0x2,则数组位于A   格式。如果3位是0x3,则数组采用B格式。

这是我生命中第一次触及这个最重要的位。在StackOverflow上搜索之后,这就是我所做的:

int lsb = first & 3;
if (lsb == 0x02)
{
    // A
}
else if (lsb == 0x03)
{
    // B
}

这是对的吗?我想在继续之前确保这是正确的方法(并避免让我的脚脱落)。

4 个答案:

答案 0 :(得分:3)

x的最低有效3位使用x&7,与您使用的first & 3不同。实际上,first & 3将占用first的最低2位。

您应该将数字转换为二进制以理解为什么会这样:二进制中的3是11,而7是111

答案 1 :(得分:2)

通常,3个最低有效位应该是yourchar& 0x07 unstead。

7因为7是1 + 2 + 4或二进制111,对应于3 LSB。

编辑:烤,应删除。遗憾。

答案 2 :(得分:1)

你需要的变量将每个位为零,三个LSB为1,简称为0111

01110x7,使用variable & 0x7屏蔽您的变量。

Google比特屏蔽了解有关它的更多信息。

答案 3 :(得分:0)

d3 = b11 = b01 | b10

所以不,现在你只比较2个LSB。 b111将是d7

如果要记下要采用的位数,则必须将其写为

unsigned int ls3b = ~(UINT_MAX << 3);

这样做,它需要全1位数组,向左移3位(保留3个LSB为0)然后反转它。