我正试图在java中查找一个数字的尾数零。 我从黑客的喜悦中得到了这段代码。但无法理解它。 根据黑客的喜悦(第5-4节),这应该给出尾随零的数量。无符号整数在此代码中扮演着至关重要的角色吗?
INT numOfTrailingZeros = 32 numOfLeadingZeros(〜(N &(N-1)))
我试过它给了我32 这是我在黑客的喜悦numOfLeading 0实施方法numOfLeadingZeros的参数是无符号整数。它在这个方法中扮演着重要的角色,任何人都可以解释我是如何工作的?
public static int numOfLeadingZeros(int x){
int n;
if(x==0) return (32);
n=1;
if((x & 0x0000FFFF) == 0) { n=n+16; x=x>>16;}
if((x & 0x000000FF) == 0) { n=n+8; x=x>>8;}
if((x & 0x0000000F) == 0) { n=n+4; x=x>>4;}
if((x & 0x00000003) == 0) { n=n+2; x=x>>2;}
return n - (x & 1);
}
FYI Java有'Integer.numberOfTrailingZeros' – harold
你的代码产生的尾数零而不是前导零的数量。你的功能是否错误? – noel