位运算

位运算

不显示使用除法和乘法实现除法

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);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值