栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用位运算实现两个整数取模

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用位运算实现两个整数取模

问题:如何再不调用%运算符的情况下高效实现两个整数的取模运算?
解答思路:
借鉴求取两个整数最大公约数的算法中【更相减损术】的思路,【被除数%除数】=【(被除数-N*除数)%除数】,通过把【被除数-N*除数】赋值给被除数来不断缩小被除数的大小,直到最终被除数小于除数,那么此时的被除数即为余数,其中0<=N 
    public static int mod(int dividend, int divisor){
        if(dividend==divisor){
            return 0;
        }
        long c=divisor;
        while(dividend > divisor)
        {
            if(dividend>=c) {
                c<<=1;
                continue;
            }
            c>>=1;
            if(dividend-c>=0){
                dividend -= c;
            }
        }
        return dividend;
    }

备注:由于JAVA中没有无符号整数,因此变量c需要定义为long型,否则c左移可能会导致溢出,造成被除数和c判断大小出错。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/837552.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号