これは、(i長い)Long.javaにnumberOfLeadingZerosある:Long.javaのnumberOfLeadingZeros(long i)がfloor(log2(x))= 63 - numberOfLeadingZeros(x)に基づいているとは思わない!
public static int numberOfLeadingZeros(long i) {
// HD, Figure 5-6
if (i == 0)
return 64;
int n = 1;
int x = (int)(i >>> 32);
if (x == 0) { n += 32; x = (int)i; }
if (x >>> 16 == 0) { n += 16; x <<= 16; }
if (x >>> 24 == 0) { n += 8; x <<= 8; }
if (x >>> 28 == 0) { n += 4; x <<= 4; }
if (x >>> 30 == 0) { n += 2; x <<= 2; }
n -= x >>> 31;
return n;
}
と著者は、それが基づいている前記床(LOG2(X))= 63 - numberOfLeadingZeros(X)またはCEIL(LOG2(X) )= 64 - numberOfLeadingZeros(x - 1)、それは本当ですか?それとも、私は理解できないほど愚かですか?
私にそれを説明できる誰か?ありがとう!
* "わかりませんが、私は理解できないほど愚かですか?" * - 私たちはその質問に答えることはできません:-)。 –
:>。時々私はばかです! – liuxiaori