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

和 XOR 不 或 左/右转


当前回答

不久前,我在维基上写了一篇小文章,展示了一个二进制的作者/读者。它在位级上工作,并展示了如何使用位操作符来打包数据。这可能是一个“现实世界”的例子,因为它在游戏中也有应用。

其他回答

奇怪吗?

(value & 0x1) > 0

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

(value & 0x1) == 0

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

河内塔线性解采用位运算来解决问题。

public static void linear(char start, char temp, char end, int discs)
{
    int from,to;
    for (int i = 1; i < (1 << discs); i++) {
        from = (i & i-1) % 3;
        to = ((i | i-1) + 1) % 3;
        System.out.println(from+" => "+to);
    }
}

这个解决方案的解释可以在这里找到

我很惊讶,没有人为互联网时代选择一个显而易见的答案。计算子网的有效网络地址。

http://www.topwebhosts.org/tools/netmask.php

我在为CMS实现安全模型时使用了按位操作。如果用户属于适当的组,就可以访问它的页面。一个用户可以在多个组中,因此我们需要检查用户组和页面组之间是否有交集。因此,我们为每个组分配了一个唯一的2次方标识符,例如:

Group A = 1 --> 00000001
Group B = 2 --> 00000010
Group C = 3 --> 00000100

我们将这些值一起OR,并将值(作为单个int)存储在页面中。例如,如果一个页面可以被a组和B组访问,我们存储值3(二进制是00000011)作为页面访问控制。同样,我们将or组标识符的值存储给用户,以表示用户所在的组。

因此,要检查给定用户是否可以访问给定页面,只需将这些值与运算在一起,并检查该值是否非零。这是非常快的,因为这个检查是在一条指令中实现的,没有循环,没有数据库往返。