浅析java中的取整(/)和求余(%)
1.取整运算符
取整从字面意思理解就是被除数到底包含几个除数,也就是能被整除多少次,那么它有哪些需要注意的地方呢?先看下面的两端代码:
inta=10; intb=3; doublec=a/b; System.out.println(c);
第一段代码的运行结果是3.0, 其中double c= a / b;//c = (10/3) = (double)3 = 3.0,这里面涉及到一个低精度到高精度的隐式装换。
inta=10; intb=3; doublec=(double)a/b; System.out.println(c);
第二段代码的运行结果是3.3333333333333335,其中double c= (double)a / b;等价于double c= 10.0 / 3.0;
减乘除计算,会先统一操作数的精度,其规则是先统一成精度高的数。
double型/int型、int型/double型,最后都转成double型/double型。
2.求余运算符
取余运算符是%是一个双目运算符,它的操作数通常是正整数也可以是负数甚至是浮点数,如果负数参与此运算,则结果的正负取决于前面一个数是整数还是负数。
对于整数,java的取余运算规则如下
a%b=a-(a/b)*b 5%3=5-(5/3)*3=2 5%-3=5-(5/-3)*-3=2 -5%3=-5-(-5/3)*3=-2 -5%-3=-5-(-5/-3)*-3=-2
如果操作数中有浮点数则采用的规则为
a%b=a-(b*q),这里q=int(a/b) 5.2%3.1=5.2-1*3.1=2.1 5.2%-3.1=5.2-(-1)*(-3.1)=2.1 -5.2%3.1=-5.1-(-1)*3.1=-2.1 -5.2%-3.1=-5.1-(-1)*(-3.1)=-2.1
示例代码:
publicclassDivision_remainder{ publicstaticvoidmain(String[]args){ inta=13/5; intb=13%5; intc=5/13; intd=5%13; inte=13/-5; intf=-13/5; inth=-13%5; intj=13%-5; System.out.println(a+","+b); System.out.println(c+","+d); System.out.println(e+","+f); System.out.println(h+","+j); }
结果为:
2,3
0,5
-2,-2
-3,3
再来一个一个分析:
a=13/5,a=2,其实就是数学上的13/5,结果为2。
b=13%5,b=3,这也是数学上的运算,得出余数为3。
c=5/13,c=0,因为被除数小于除数,结果可以看成0.x,但是int类型是整数类型,所以结果只为0。
d=5%13,d=5,数学上规定:如果被除数比除数小,商是0,余数就是被除数本身。
e和f不用说了,结果都为-2。
但是h和j怎么是一个-3一个3呢,因为取余运算的符号是根据第一个运算数决定的,-13%5结果是-3,而13%-5结果则是3。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。