下面的位运算符在现实世界中有哪些用例?
和 XOR 不 或 左/右转
下面的位运算符在现实世界中有哪些用例?
和 XOR 不 或 左/右转
当前回答
您可以使用它们作为一种快速而不常用的散列数据的方法。
int a = 1230123;
int b = 1234555;
int c = 5865683;
int hash = a ^ b ^ c;
其他回答
河内塔线性解采用位运算来解决问题。
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);
}
}
这个解决方案的解释可以在这里找到
低级编程就是一个很好的例子。例如,你可能需要写一个特定的位到内存映射寄存器,以使某些硬件做你想要它做的事情:
volatile uint32_t *register = (volatile uint32_t *)0x87000000;
uint32_t value;
uint32_t set_bit = 0x00010000;
uint32_t clear_bit = 0x00001000;
value = *register; // get current value from the register
value = value & ~clear_bit; // clear a bit
value = value | set_bit; // set a bit
*register = value; // write it back to the register
同样,htonl()和htons()是使用&和|操作符实现的(在字节顺序不匹配网络顺序的机器上):
#define htons(a) ((((a) & 0xff00) >> 8) | \
(((a) & 0x00ff) << 8))
#define htonl(a) ((((a) & 0xff000000) >> 24) | \
(((a) & 0x00ff0000) >> 8) | \
(((a) & 0x0000ff00) << 8) | \
(((a) & 0x000000ff) << 24))
我将它们用于多选择选项,这样我只存储一个值,而不是10个或更多
我曾在一些游戏开发书籍中看到它是一种更有效的乘除方法。
2 << 3 == 2 * 8
32 >> 4 == 32 / 16
我不认为这是按位计算的,但是ruby的Array通过普通整数按位操作符定义了集合操作。因此[1,2,4]&[1,2,3]# =>[1,2]。对于a ^ b# =>集差值和| b# =>并集也是如此。