下面的文本是我在一段文档中坚持的内容。
数组前
char
的最低有效 3 位指示是否 它是A
或B
.如果 3 位0x2
,则数组处于A
格式。如果 3 位是0x3
的,则数组是B
格式。
这是我有生以来第一次触及这种最不重要的部分。在StackOverflow上搜索后,这就是我所做的:
int lsb = first & 3;
if (lsb == 0x02)
{
// A
}
else if (lsb == 0x03)
{
// B
}
这是对的吗?我想在继续前进之前确保这是正确的方法(并避免以后吹掉我的脚)。
x
中最不重要的 3 位是使用 x&7
获取的,与您使用的first & 3
不同。事实上,first & 3
将占用最不重要的 2 位first
。
您应该将数字转换为二进制以了解为什么会这样:二进制中的 3 是 11
,而 7 是111
。
通常,3 个最低有效位应该是 yourchar&0x07 unstead。
7因为 7 是 1+2+4 或二进制 111,对应于 3 LSB。
编辑:烤,应删除。不好意思。
您需要的变量将具有每个位零和三个LSB 1,简而言之,这是0111
。
0111
0x7
,请使用variable & 0x7
来屏蔽变量。
谷歌位屏蔽以获取有关它的更多信息。
d3 = b11 = b01 | b10
所以不,现在你只比较 2 个 LSB。 b111
会d7
如果你想写下要采取的位数,你必须把它写成
unsigned int ls3b = ~(UINT_MAX << 3);
这样做是,它采用所有 1 位数组,将其向左移动 3 位(留下 3 个 LSB 0),然后反转它。