Java 求余操作符

来源:互联网 发布:qq老密数据库下载 编辑:程序博客网 时间:2024/06/01 08:43

百分号(%)是求余操作符。22%5即从22中拿走5,再拿走5...不够拿走,就余下了4。代码放在:

package semantics.statement;

public class ArithmeticOpDemo{


}


求余操作符有一些需要注意的细节。

  • 整数与浮点数的不同
  • 整数除法遵循规则

1.浮点数

通常我们不对浮点数求余。

    static void remainderOperator(){         pln("15 / 4.0 = "+ 15/4.0);        pln("15 % 4.0 = "+ 15%4.0);        pln("7 % 2.2 = "+ 7 % 2.2);    }
15 / 4.0 = 3.75
15 % 4.0 = 3.0
7 % 2.2 = 0.39999999999999947

虽然15 % 4.0 比较理想,但是7 % 2.2不是我们希望的0.4,解释起来也麻烦。

2.整数除法遵循规则

如果两个操作数都是正整数,如同还没有学过小数的小朋友的计数方式。这是常用的方式,
13/ 5 = 2
13 % 5 = 3
2 % 5  = 2

有奇葩问:13 / 5.0  = 2.6,那么余数是不是2.6的小数点后面的6

我们只能够说,13 / 5.0  = 2.6,的确13 / 5  = (int)Math.floor(13 / 5.0),即2,你在这一步是对的,

那么,余数13 % 5 = 13- (13 / 5)*5 = 13-2*5 =3
整数除法遵循规则:

(x/y)*y + x %y == x

 x %y = x - (x/y)*y 


如果负数参与计算,x/y 的结果很容易理解,可以将符号先写出来。

        pln("-13/ 5 = "+ -13 / 5);     //  -2

        pln("13/ -5 = "+ 13 / -5);     //  -2
        pln("-13/ -5 = "+ -13 / -5);  // 2

但是,从x %y = x - (x/y)*y 可知,

-13% 5 = -13 - (-2) *5 = -13+10 = -3

13% -5 = 13 - (-2) *(-5) = 13 -10 = 3
-13%-5  = -13 -  2*(-5) = -13 +10 = -3

虽然不难,但是一会3一会-3,程序猿通常很懒的,不希望搞这种东西。所以,

当%的一个或两个操作数是负数时,理解起来并不直观,因而应避免在负数时使用%。


3.i%2==0

求余操作时,0是个好东西,如同C语言中的0. 判断i是否偶数,使用if(i%2==0);判断i是否奇数数,不要if(i%2==1) ,因为还有i%2== -1。

例如打印[-1,6]之间的奇数:

    static void remainderOp(){        for(int i = -1; i<6; i++ ){            if(i%2==0){                                   continue;            }                         System.out.println("i =" + i);        }    }
i =-1
i =1
i =3
i =5

如果是代码

    static void remainderOp(){        for(int i = -1; i<6; i++ ){            //if(i%2==0) continue;System.out.println("i =" + i);            if(i%2==1){                                   System.out.println("i =" + i);            }        }    }
i =1
i =3
i =5



0 0
原创粉丝点击