当我声明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