我發現與這些表達式while(n&3)==0
和n>>=2
混淆。當執行while((n&3)==0)
會發生什麼n>>=2
當(n&3)== 0和n >> = 2時表達式的含義是什麼
public int numSquares(int n) {
while ((n & 3) == 0) //n % 4 == 0
n >>= 2;
if ((n & 7) == 7) return 4; //n% 8 == 7
if(is_square(n)) return 1;
int sqrt_n = (int) Math.sqrt(n);
for (int i = 1; i<= sqrt_n; i++){
if (is_square(n-i*i)) return 2;
}
return 3;
}
public boolean is_square(int n){
int temp = (int) Math.sqrt(n);
return temp * temp == n;
}
也許值得一提的是,N >>越= 2相當於除以4。 – RealSkeptic
@RealSkeptic雖然對於正數,結果是相同的,對於負數它是不同的([demo](http://ideone.com/klxkbp))。這就是爲什麼我不願意提4分。 – dasblinkenlight
我很好奇。有沒有使用按位&而不是餘數%運算符的優勢? – Amila