您的位置:首页 > 编程语言 > Java开发

Java求余运算

2015-09-12 20:01 281 查看

Java求余运算

求余结果不一定能为整数。求余运算的真正过程为使用第一操作数除以第二个操作数,得到一个整数的结果后剩下的值就是余数。求余运算是两部操作,先除后减。举个例子:

public class Main
{
public static void main(String[] args)
{
double a = 5.2;
double b = 3.1;
double ret = a % b;
System.out.println(ret); // output: 2.1
}
}


因为 5.2 = 3.1 * 1 + 2.1;

在刷OJ时,有时需要注意这个%,因为是两步的操作,如果时间卡的特别死而且数据十分的强的话一定要注意%的时间开销。

更加快速的取mod运算方法 —— 位与操作

笔者是通过阅读HashMap的底层实现源码学习到这种方法。HashMap确定entry在table数组的位置的方法就是把Key.hashCode()作为参数,重新利用自己的算法计算一遍hashCode,并将此hashCode同table.length-1进行%运算,通过余数确定entry的位置。巧就巧在利用了&运算。代码如下

static int indexFor(int h, int length) {
return h & (length-1);
}


HashMap的size恒为2的次方大小。这里的h是HashMap自己算的hashcode。length传入table.length-1。由于table数组的length为2^n,通过几个样例计算发现此时做&运算时的效果正好等同于%,位运算的速度是很快的。所以,下次如果说需要取模而且数组长度为2^n时,可以首先考虑&运算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java