位运算
不显示使用除法和乘法实现除法
https://leetcode.com/problems/divide-two-integers/
- 二进制实现除法
https://leetcode.com/problems/divide-two-integers/discuss/338701/C%2B%2B-32-bit-binary-long-division-algorithm-O(32)-O(1)-run-time-(0-4ms-no-cheats)
用位运算实现一个无符号数除法
void unsignedDivide(int dividend, int divisor,int& q,int& r) {
// 自己手推一下手工除法就懂了
q = 0, r = 0;
for (int i = 31; i >= 0; i--) { // 从高位到低位遍历
r <<= 1;
r |= (dividend >> i) & 1; //取出被除数i位
if (r >= divisor) { //如果够减,余数减去除数,商上 1
r -= divisor;
q |= (1 << i);
}
}
}