【问题标题】:Bitwise AND/OR Operator is Appending?按位 AND/OR 运算符正在附加?
【发布时间】:2015-04-19 19:08:23
【问题描述】:

我只是在玩一些位运算符,以刷新自己的工作原理。我发现了一些很奇怪的东西,但也许这只是对位运算符如何工作的根本误解。

这个程序:

#include <iostream>
using namespace std;

int main() {
    int base = 16;
    cout << (base << 2) << endl;
    cout << (base >> 2) << endl;
    cout << (base &  0b0001) << endl;

    return 0;
}

输出这个:

64
4
0

前两个是我预料的,但0 最后一个似乎有点奇怪(不是双关语),正如我所期望的那样看到1。如果我这样做base | 0b0001,我会得到17。似乎位模式被附加到末尾。这是应该发生的事情,还是我在这里遗漏了什么?

我正在使用 G++ v4.8.2。

【问题讨论】:

  • 不,没有附加任何内容 - 16 AND 1 == 0, 16 OR 1 == 17
  • LOL 混淆 C 和 C++ 语义-2.0
  • @wildplasser 你是说16 and 116 &amp;&amp; 1 一样吗?我正在尝试在 C++ 中查找 and 运算符的名称,但不记得了……“命名”逻辑运算符是如何调用的?
  • @wildplasser,找到了它们,二合字母和三合字母运算符 :)(在逻辑运算符的情况下只是二合字母)

标签: c++ bit-manipulation


【解决方案1】:

请记住,base16,即二进制中的 10000。现在与00001 一起使用,看看发生了什么。

10000 &amp; 00001 = 0 -> 任意基数中的 0

10000 | 00001 = 10001 -> 17 十进制

【讨论】:

  • facepalm 我真的应该用 15 进行测试。那是我一直在脑海中的位模式。谢谢,这是一个愚蠢的错误。
  • @OliverSpryn 很多次我也认为 1111 是 16 :)
猜你喜欢
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多