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

和 XOR 不 或 左/右转


当前回答

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

其他回答

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

按位&用于屏蔽/提取字节的某一部分。

1字节变量

 01110010
&00001111 Bitmask of 0x0F to find out the lower nibble
 --------
 00000010

特别是移位运算符(<< >>)经常用于计算。

还没人提到过收藏。有时您有一个较小的可能值集合,比如只有10或20个可能值,您希望将其中一些值保存在一个集合中。当然,您可以使用常规的Set实现,它很可能使用支持哈希表。但由于可能值的集合是如此之小,这实际上只是浪费时间和空间。相反,您可以将集合存储在单个int或长值中,这正是java EnumSet所做的,如果我没记错的话。

一个非常具体的例子,但我用它们让我的数独求解器运行得更快(我和一个朋友进行了比赛)

每一列、行和3x3都表示为一个无符号整数,当我设置数字时,我会为相关列、行和3x3平方中设置的数字标记适当的位。

这样就很容易看到我可以在给定的正方形中放置什么可能的数字,因为我将右边的列、行和3x3的正方形放在一起,然后不这样做,留下一个表示给定位置可能的合法值的掩码。

希望大家能理解。

当我有一堆布尔标记时,我喜欢将它们全部存储在一个整型中。

我用bitwise-AND取出它们。例如:

int flags;
if (flags & 0x10) {
  // Turn this feature on.
}

if (flags & 0x08) {
  // Turn a second feature on.
}

etc.