使用int的按位运算

时间:2015-01-29 10:45:07

标签: c++ c int byte bit-manipulation

对不起我的英语。我有一些存储在0到255之间的int值。要找出7位数的内容,我将数字转换为二进制系统,然后在行中检查行:

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

出现了两个问题,

  
      
  1. 如果我使用int(我们有4个字节),并且我的数字是无符号的,则范围为[0,255]我如何确定需要考虑哪个字节?高字节?

  2.   
  3. 我找到了所需的字节,你怎么知道第6位的内容?

  4.   

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

感谢所有,我测试int数字:

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

打印: 11000000

2 个答案:

答案 0 :(得分:2)

  1. 这是实现定义的,取决于CPU的endianess。如果你很聪明,你可以这样检查:the_int & 0xFF,无论结束性如何,它都会给你最不重要的字节。

  2. byte & (1 << 6)。也许。请注意,位计数是零索引的(就像数组一样),因此您必须小心使用这些术语。 &#34;比特6&#34;和#34;第6位&#34;可能有不同的含义。始终将位枚举为7 6 5 4 3 2 1 0,然后它将与C代码一致。

答案 1 :(得分:1)

您可以选择要检查的“字符”数据类型。它回答了你的两个问题。因为,字符数据类型是1字节(8位)。它也包含整数值,因为char&amp; int是兼容的数据类型。