0

以下文本是我在一份文档中所坚持的内容。

数组第一个的最低 3 位char表示它是A还是B。如果 3 位是0x2,则数组是一种A 格式。如果 3 位是0x3,则数组是一种B格式。

这是我有生以来第一次接触到这个最不重要的东西。在 StackOverflow 上搜索后,这就是我所做的:

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

这个对吗?在我继续之前,我想确保这是正确的方法(并避免以后把我的脚吹掉)。

4

4 回答 4

4

与您使用的不同,使用的最低 3 位x是使用的。实际上会占用.x&7first & 3first & 3first

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

于 2013-02-03T11:58:27.010 回答
2

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

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

编辑:烤,应该删除。对不起。

于 2013-02-03T12:01:04.697 回答
1

您需要的变量将具有每个位为零和三个 LSB 1,0111简而言之。

01110x7variable & 0x7用来掩盖你的变量。

谷歌位掩码有关它的更多信息。

于 2013-02-03T11:59:39.310 回答
0
d3 = b11 = b01 | b10

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

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

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

它的作用是,它采用全 1 位数组,将其向左移动 3 位(将 3 个 LSB 保留为 0),然后将其反转。

于 2013-02-03T12:04:44.027 回答