下面的位运算符在现实世界中有哪些用例?
和 XOR 不 或 左/右转
下面的位运算符在现实世界中有哪些用例?
和 XOR 不 或 左/右转
当前回答
我见过它们在基于角色的访问控制系统中使用。
其他回答
似乎没有人提到定点数学。
(是的,我老了,好吗?)
大约三分钟前,我刚刚使用了位异或(^)来计算与PLC串行通信的校验和…
我一直假设按位操作是相当简单的操作,所以当运行时间至关重要时,通过bitset实现的解决方案可以通过恒定的数量提高运行时间,这取决于算法。
一个常见的用法是对齐,例如我需要我的数据在4字节或16字节的边界上对齐。这在RISC处理器中非常常见,其中未对齐的加载/存储要么代价高昂(因为它触发了一个异常处理程序,然后需要修复未对齐的加载),要么根本不允许。
对于任何以2为幂的对齐,下一个对齐的pos可以计算如下:
aligned_offset = alignment + ((current_offset - 1) & ~(alignment - 1))
所以在4字节对齐和当前偏移量为9的情况下:
aligned_offset = 4 + ((9-1) & ~(4-1)) = 4 + (8 & 0xFFFFFFFC) = 4+ 8 = 12
所以下一个4字节的对齐偏移量是12
一个数x是2的幂吗?(例如,在计数器递增的算法中很有用,并且一个操作只执行对数次)
(x & (x - 1)) == 0
整数x的最高位是哪位?(例如,这可以用来找出比x大的2的最小次幂)
x |= (x >> 1);
x |= (x >> 2);
x |= (x >> 4);
x |= (x >> 8);
x |= (x >> 16);
return x - (x >>> 1); // ">>>" is unsigned right shift
整数x的最小1位是哪一位?(帮助找出能被2整除的次数。)
x & -x