以下文字是我在一篇文档中坚持的内容。
数组的第一个
char
的最低3位表示是否 它是A
或B
。如果3位为0x2
,则数组位于A
格式。如果3位是0x3
,则数组采用B
格式。
这是我生命中第一次触及这个最重要的位。在StackOverflow上搜索之后,这就是我所做的:
int lsb = first & 3;
if (lsb == 0x02)
{
// A
}
else if (lsb == 0x03)
{
// B
}
这是对的吗?我想在继续之前确保这是正确的方法(并避免让我的脚脱落)。
答案 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
。
0111
为0x7
,使用variable & 0x7
屏蔽您的变量。
Google比特屏蔽了解有关它的更多信息。
答案 3 :(得分:0)
d3 = b11 = b01 | b10
所以不,现在你只比较2个LSB。 b111
将是d7
如果要记下要采用的位数,则必须将其写为
unsigned int ls3b = ~(UINT_MAX << 3);
这样做,它需要全1位数组,向左移3位(保留3个LSB为0)然后反转它。