Java 求余操作符

百分号(%)是求余操作符。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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值