位操作 - 如何在C++中获取字符中最不重要的 3 位

bit manipulation - How to get the least significant 3 bits of a char in C++?

本文关键字:不重要 重要的 字符 获取 C++ 位操作      更新时间:2023-10-16

下面的文本是我在一段文档中坚持的内容。

数组前char的最低有效 3 位指示是否 它是AB.如果 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。 b111d7

如果你想写下要采取的位数,你必须把它写成

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

这样做是,它采用所有 1 位数组,将其向左移动 3 位(留下 3 个 LSB 0),然后反转它。