我正在使用使用余数运算符,数字是另一个的倍数。如果第一个数字是3,第二个数字是15那么
if (3 % 15 == 0) {
}
然后它起作用(不进入if)。但是现在如果第一个数字是3而第二个数字是4000那么它不起作用条件仍然是真的
if (3 % 4000 == 0) {
}
这里不应该进入案例。但这里的条件是真的。为什么会这样?
答案 0 :(得分:5)
如果你仔细测试你的程序,你会发现if
语句的正文都没有执行。
原因是你有%
错误的方式来论证。
if
应为:
if (4000 % 3 == 0) {
%
运算符返回将第一个参数除以 second 的剩余部分。
答案 1 :(得分:0)
%modulo division将返回a / b的剩余部分(除以b)
所以这里3%15
和3%4000等于3
答案 2 :(得分:0)
你不能用较小的数字划分小数字或余数。你有
if(3 % 4000==0){}
因此,在进行此类操作之前,您可以使用一种方法并向其传递2个数字,这将首先检查第一个数字是大于还是小于数字,而不是相应的数字。 即。
//you may change the return type.
void multiple(int a, int b)
{
if(a>b)
{
if(a % b == 0)
{
//TO DO Code here
}
}
else
{
if(b%a==0)
{
//TO DO Code here
}
}
}
答案 3 :(得分:0)
它适用于每个值,其余的将始终为3,因此'if'将不会执行。如果你想用0来检查,写“if”的更好方法是,
if (!(3 % 4000)){
// Code to execute
}
在这种情况下,它仅在存在余数0时执行。并且还使用变量类型检查一次。
一种可能性是,如果将其声明为signed short int(0到127)并将4000存储到它,则会发生溢出,并且变量值将设置为minimum(即零(0))。因此,在您的情况下,它执行'if'。只是为了给你一个想法。
答案 4 :(得分:0)
当%b == 0时,如果a>> = b
,则a是b的倍数表示< b,a永远不会是倍数b,除非它是零