下面的位运算符在现实世界中有哪些用例?

和 XOR 不 或 左/右转


当前回答

下面是一些处理将标志存储为单个位的常见习惯用法。

enum CDRIndicators {
  Local = 1 << 0,
  External = 1 << 1,
  CallerIDMissing = 1 << 2,
  Chargeable = 1 << 3
};

unsigned int flags = 0;

设置Chargeable标志:

flags |= Chargeable;

清除CallerIDMissing标记:

flags &= ~CallerIDMissing;

测试CallerIDMissing和Chargeable是否设置:

if((flags & (CallerIDMissing | Chargeable )) == (CallerIDMissing | Chargeable)) {

}

其他回答

我使用它们来实现快速BCD计算(会计师和审计员会对fp舍入感到不安)。

加密都是按位操作。

您可以使用它们作为一种快速而不常用的散列数据的方法。

int a = 1230123;
int b = 1234555;
int c = 5865683;
int hash = a ^ b ^ c;

奇怪吗?

(value & 0x1) > 0

它能被2(偶数)整除吗?

(value & 0x1) == 0

我将它们用于多选择选项,这样我只存储一个值,而不是10个或更多