int 位运算

Bitwise operations with int

对不起我的英语。我在其中存储了从 0 到 255 的多个 int 值。为了找出 7 位数字中的内容,我将数字转换为二进制系统,然后在行中检查行:

if (informationOctet_.substr(6, 1) == "0")
{
...
}

出现了两个问题,

  1. If I use int (which we have 4 bytes), and my number is unsigned int the range [0, 255] How do I determine which byte I need to consider? High byte?

  2. I have found the desired byte, how do you know the contents of, for example, the 6th bit?

P.S。 我不使用法术,因为使用 unsigned int。

谢谢大家,我测试了整数:

int k = 3;
for (int i = 0; i < 8; i++)
{
    if (k & (1 << i))
    {
        std::cout << 1;
    }
    else
    {
        std::cout << 0;
    }
}

打印:11000000

您可以选择 "Char" 数据类型进行检查。它回答了你的两个问题。因为,字符数据类型是 1 字节(8 位)。它也包含整数值,因为 char 和 int 是兼容的数据类型。

  1. 这是实现定义的,取决于 CPU 的 endianess。如果你很聪明,你可以这样检查:the_int & 0xFF,无论字节顺序如何,它总是会给你最低有效字节。

  2. byte & (1 << 6)。可能是。请注意,位计数是零索引的(就像数组一样),因此您必须小心这些术语。 "Bit 6" 和 "the 6th bit" 可能有不同的含义。总是枚举位为7 6 5 4 3 2 1 0,那么就会和C代码保持一致