C语言_“/”和“%”运算符详解:
除法运算符"/":
二元运算符,具有左结合性。参与运算的量均为整型时,结果为整型,舍去小数。如果运算量中有一个为实型,结果为双精度实型。除号的正负取舍和一般的算数一样,符号相同为正,相异为负。例如:
5/2=2,1/2=05/2.0=2.5
取模运算符"%":
二元运算符,具有左结合性。参与运算的量均为整型。并且参与运算的量可以为负数。取模运算的结果等于两个数相除后的余数。
例如:5%2=1,1%2=1
5%2.0和5.0%2//error C2297: “%”: 非法,右操作数包含“double”类型
int a = 23%-3;//a = 2
int b = -23%3;//b = -2//注明:求余符号的正负取舍和被除数符号相同
当前面的数小于后面的数时,其实求余运算可以看成(如下),如果a<b的话,这样的商为0,余数就是a
a%b=a-(int)(a/b)*b1%2=1
2%5=2
a % b
这个关系表达式a%b == a-(int)(a/b)*b 是这么解释的:先运算(a/b)然后a-((a/b的值)乘以b)
50除以2=25
结果为整数,则取值为0 (原因就是50除以2的值是整数,余数为0)
例2. 7%2
7除以2=3.5
则还是用3乘以2=6
再用7-6,结果就是余数 1
C语言中,任意一个正整数对1求余结果为0还是1?是0,如24%1=0
注意:
Java中的/和C、C++中的/在计算结果、正负判断上是相同的;Java中的%虽然在结果的正负判断上和C、C++中是相同的,但是Java中的%的操作数允许小数出现,但是C、C++中却规定参与运算的量必须为整数。
Java: System.out.println(5.5%1.0); //right//0.5
C++: cout<<5.5%1.0<<endl; //error