我喜欢看到人们编写 Bit Twiddling 代码,但我根本无法理解它。经历了黑客的喜悦和http://graphics.stanford.edu/~seander/bithacks.html ,但我什么也没明白。
例如:
怎么1 | 2
返回 3
或者为什么 a ^=b; b^=a; a ^=b;
交换值等等...
一种方法:
private T[] ensureCapacity(int minCapacity) {
if (tmp.length < minCapacity) {
// Compute smallest power of 2 > minCapacity
newSize |= newSize >> 1;
int newSize = minCapacity;
newSize |= newSize >> 2;
newSize |= newSize >> 4;
newSize |= newSize >> 8;
newSize |= newSize >> 16;
newSize++;
if (newSize < 0) // Not bloody likely!
newSize = minCapacity;
else
newSize = Math.min(newSize, a.length >>> 1);
@SuppressWarnings({"unchecked", "UnnecessaryLocalVariable"})
T[] newArray = (T[]) new Object[newSize];
tmp = newArray;
}
return tmp;
}
下面的人正在做什么:
int newSize = minCapacity;
newSize |= newSize >> 1;
newSize |= newSize >> 2;
newSize |= newSize >> 4;
newSize |= newSize >> 8;
newSize |= newSize >> 16;
newSize++;
或
newSize = Math.min(newSize, a.length >>> 1);
最好使用 >>
或 >>>
运算符我的意思是在 Joshua Bloch 修复了损坏的二分搜索之后我明白使用 >>> 是安全的
而不是 >>
。请帮忙,如果有教程,那么上述来源我将非常感激。
计算位输出的最简单方法是什么,例如 1 | 2 = 3
?
我的意思是,除了使用计算器或其他东西之外,我不知道位形式看起来如何。.有没有最简单的方法来计算这些东西,而无需任何帮助,但要记住?
最佳答案
What is the easiest way to calculate the output of bits for example 1 | 2 = 3.
将数字写成二进制。这就是数字的真实表示方式。
00000001
| 00000010
= 00000011
关于java - 我需要关于 Bit Twiddling 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549303/