【问题标题】:Bitwise operations with int使用 int 进行位运算
【发布时间】:2015-01-29 10:45:07
【问题描述】:

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

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

出现了两个问题,

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

  2. 我找到了想要的字节,你怎么知道,比如第6位的内容?

附: 我不使用拼写,因为使用 unsigned int。

谢谢大家,我测试int number:

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

打印:11000000

【问题讨论】:

  • 2. if (n & (1
  • 您不需要转换为二进制,有位运算符可以让您直接处理整数。另请注意,也许您不应该依赖 int == 4 字节这一事实,标准不保证这一点。

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


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

  2. byte &amp; (1 &lt;&lt; 6)。也许。请注意,位计数是零索引的(就像数组一样),因此您必须小心这些术语。 “第 6 位”和“第 6 位”可能有不同的含义。总是将位枚举为7 6 5 4 3 2 1 0,则与C代码一致。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 2015-10-30
      相关资源
      最近更新 更多