https://math.stackexchange.com/questions/679146/euclidean-divison-program
这个问题并没有得到解答。
我了解到,给定两个整数a和b(其中b ≠ 0),存在唯一的整数q和r使得a = bq + r且0 ≤ r < |b|,其中|b|表示b的绝对值-定义欧几里得除法。
下面是一个相应的程序,实现了这个逻辑:
int ifloordiv(int n, int d){
if (n >= 0)
return n / d;
else
return ~(~n / d);
}
阅读上述代码后,我很容易理解if(n>=0){}块代码的逻辑,即我们正在进行实际除法而不是欧几里得除法。
但是,else{(n<0)}代码逻辑使用位补码运算符(~)对我来说并不明显,我无法理解使用~运算符的思考方法。通常,我们在想到除法时使用>>运算符。
我知道Java中~运算符是整数类型的1's补码运算符。
我的问题是:
我想了解思考方法,即如何考虑使用位补码运算符(~),以帮助您在n<0时执行欧几里得除法。因为对我来说使用~运算符并不明显。请帮助我调整我的方法。