Bit Twiddling コードを書いている人を見るのは大好きですが、まったく理解できません。Hacker's Delight とhttp://graphics.stanford.edu/~seander/bithacks.htmlを読みましたが、何も理解できませんでした。
例えば:
どうやって1 | 2
戻ってくるの3
か、どうやっa ^=b; b ^= a; a ^=b;
て値を交換するのかなど...
1 つの方法:
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 が壊れた二分探索を修正した後、 or演算子を使用する方>>>
が安全であることがわかり>>>
ました>>
。助けてください。チュートリアルがある場合は、上記のソースに感謝します。
たとえば、ビットの出力を計算する最も簡単な方法は何1 | 2 = 3
ですか?
つまり、計算機か何かを使用しない限り、ビット形式がどのように見えるかわかりません..これらのことを助けなしに計算する最も簡単な方法はありますか?