下面的位运算符在现实世界中有哪些用例?
和 XOR 不 或 左/右转
下面的位运算符在现实世界中有哪些用例?
和 XOR 不 或 左/右转
当前回答
一个常见的用法是对齐,例如我需要我的数据在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
其他回答
一个常见的用法是对齐,例如我需要我的数据在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
河内塔线性解采用位运算来解决问题。
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);
}
}
这个解决方案的解释可以在这里找到
当我第一次开始C编程时,我理解了真值表和所有的东西,但直到我读了这篇文章http://www.gamedev.net/reference/articles/article1563.asp(它给出了真实的例子),我才完全了解如何实际使用它。
我很惊讶,没有人为互联网时代选择一个显而易见的答案。计算子网的有效网络地址。
http://www.topwebhosts.org/tools/netmask.php
如果你想计算你的数字mod(%) 2的某次方,你可以使用yourNumber & 2^N-1,在这种情况下,它与yourNumber % 2^N相同。
number % 16 = number & 15;
number % 128 = number & 127;
这可能只是作为模数运算的一种替代品有用,它的红利很大,是2^N。但即便如此,在我在。net 2.0上的测试中,它相对于模运算的速度提升也可以忽略不计。我怀疑现代编译器已经执行了这样的优化。有人知道更多吗?