java中mod的语法是什么?

时间:2008-09-18 05:17:16

标签: java modulo

作为伪代码的一个例子:

if ((a mod 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}

16 个答案:

答案 0 :(得分:344)

对于非负整数,您可以使用余数运算符%。您的确切示例:

if ((a % 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}

这可以简化为单行:

isEven = (a % 2) == 0;

答案 1 :(得分:110)

以下是最小Java代码中伪代码的表示;

boolean isEven = a % 2 == 0;

我现在将其分解为其组件。 Java中的模数运算符是百分比字符(%)。因此,获取int%int将返回另一个int。 double equals(==)运算符用于比较值,例如一对int并返回一个布尔值。然后将其分配给布尔变量'isEven'。根据运算符优先级,将在比较之前评估模数。

答案 2 :(得分:90)

由于其他人已经给出了答案,我将添加一些额外的背景。 %“模数”运算符实际上执行余数运算。 mod和rem之间的区别很微妙,但很重要。

( - 1 mod 2)通常给出1.更具体地说,给定两个整数X和Y,操作(X mod Y)倾向于返回[0,Y]范围内的值。换句话说,X和Y的模量总是大于或等于零,并且小于Y.

使用“%”或rem运算符执行相同的操作可保持X值的符号。如果X为负数,则得到范围(-Y,0)的结果。如果X为正数,则得到[0,Y]范围内的结果。

这种微妙的区别通常无关紧要。回到你的代码问题,有很多方法可以解决“均匀度”。

第一种方法对初学者有好处,因为它特别冗长。

// Option 1: Clearest way for beginners
boolean isEven;
if ((a % 2) == 0)
{
  isEven = true
}
else
{
  isEven = false
}

第二种方法更好地利用了语言,并导致更简洁的代码。 (不要忘记==运算符返回一个布尔值。)

// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);

第三种方法是完整性,并使用ternary运算符。虽然三元运算符通常非常有用,但在这种情况下,我认为第二种方法更为出色。

// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;

第四种也是最后一种方法是使用binary representation of integers的知识。如果最低有效位为0,则数字为偶数。可以使用bitwise-and operator(&)来检查。虽然这种方法是最快的(你做的是简单的位掩码而不是除法),但对于初学者来说它可能有点先进/复杂。

// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);

这里我使用了bitwise-and运算符,并以选项2中所示的简洁形式表示它。在选项1的表单中重写它(以及选项3的表单)留给读者练习。 ;)

希望有所帮助。

答案 3 :(得分:31)

要使Java的%(REM)操作像MOD一样用于负X和正Y值,您可以使用此方法:

private int mod(int x, int y)
{
    int result = x % y;
    if (result < 0)
    {
        result += y;
    }
    return result;
}

或使用三元运算符(在某些情况下更短但不可能或效率更低):

private int mod(int x, int y)
{
    int result = x % y;
    return result < 0? result + y : result;
}

答案 4 :(得分:12)

虽然可以通过检查值是否为负值来进行正确的模数,如果是(正如许多人所建议的那样),可以更正它,但是有一个更紧凑的解决方案。

(a % b + b) % b

这将首先执行模数,将值限制为-b - &gt; + b范围然后添加b以确保该值为正,让下一个模数将其限制为0 - > b范围。

注意:如果b为负数,结果也为负数

答案 5 :(得分:11)

Java实际上没有C语言的模运算符。 Java中的%是余数运算符。在正整数上,它的工作方式与模数完全相同,但它在负整数上的工作方式不同,与模数不同,它也可以用于浮点数。尽管如此,除了正整数之外,很少使用%,所以如果你想把它称为模数,那么请随意!

答案 6 :(得分:11)

代码运行速度更快,而不使用modulo:

public boolean isEven(int a){
    return ( (a & 1) == 0 );
}

public boolean isOdd(int a){
    return ( (a & 1) == 1 );
}

答案 7 :(得分:6)

if (a % 2 == 0) {
} else {
}

答案 8 :(得分:4)

在使用'remainder'运算符%:

之前,您应该检查规范

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.17.3

// bad enough implementation of isEven method, for fun. so any worse?
boolean isEven(int num)
{
    num %= 10;
    if(num == 1)
       return false;
    else if(num == 0)
       return true;
    else
       return isEven(num + 2);
}
isEven = isEven(a);

答案 9 :(得分:3)

另外,mod可以这样使用:

int a = 7;
b = a % 2;

b等于1.因为7 % 2 = 1

答案 10 :(得分:3)

Java中的余数运算符为%,模运算符可以表示为

public int mod(int i, int j)
{
  int rem = i % j;
  if (j < 0 && rem > 0)
  {
    return rem + j;
  }
  if (j > 0 && rem < 0)
  {
    return rem + j;
  }
  return rem;
}

答案 11 :(得分:1)

模运算符是%(百分号)。要测试均匀度或通常以2的幂为模,你也可以使用&amp; (和运算符)像isEven =!(a&amp; 1)。

答案 12 :(得分:1)

另一种方式是:

boolean isEven = false;
if((a % 2) == 0)
{
    isEven = true;
}

但最简单的方法仍然是:

boolean isEven = (a % 2) == 0;

喜欢@Steve Kuo说。

答案 13 :(得分:1)

正如其他人指出的那样,%(余数)运算符与数学运算符不同 mod模数运算/函数。

  

mod%

     

x mod n函数在x范围内将n映射到[0,n)
  而x % n运算符在x范围内将n映射到(-n,n)

为了有一种方法可以使用数学模运算而不是 关心x前面的符号可以使用:

((x % n) + n) % n

也许这张照片有助于更好地理解它(我很难把头缠起来)

enter image description here

答案 14 :(得分:0)

Java中,可以这样执行 mod 操作:

Math.floorMod(a, b)

注意: mod 操作不同于 remainder 操作。在Java中,余数操作可以这样执行:

a % b

答案 15 :(得分:-2)

@Cody代码的替代方法:

使用模数运算符:

bool isEven = (a % 2) == 0;

我认为这比编写if / else要好得多,因为重复次数少了很多。未使用的灵活它确实需要更多的脑力来检查,但isEven的良好命名会补偿。