當我聲明while循環之外的移位時,我得到的結果等於16這是一個錯誤的答案。但是當我在while循環中聲明它時,我得到了正確的答案結果== 11.差異如何改變答案?在while循環之外初始化變量是什麼原因?
long a = Math.abs((long)100);
long b = Math.abs((long)9);
int result = 0;
while (a >= b){
int shift = 0;
while(a >= (b<<shift)){
shift ++;
}
a -= b << (shift - 1);
result += 1 << (shift - 1);
}
很明顯,循環外部的'shift'會保持它之前迭代的值,而over版本則不會。 – Tom
這不是你聲明的地方,它是你設置爲0的地方。 – Arkadiy