作为伪代码中的一个例子:

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

当前回答

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

Mod vs % x mod n函数在[0,n)范围内将x映射到n。 而x % n操作符在(-n,n)范围内将x映射到n。

为了有办法用数学上的模运算和不运算 关心x前面的符号1可以用:

((x % n) + n) % n

也许这张图有助于更好地理解它(我一开始很难理解它)

其他回答

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

既然其他人都已经给出了答案,我将添加一点额外的上下文。%“模”运算符实际上是在执行余数运算。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);

第三种方法是为了完整起见,它使用三元操作符。虽然三元操作符通常非常有用,但在这种情况下,我认为第二种方法更好。

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

第四种也是最后一种方法是使用整数的二进制表示的知识。如果最低有效位为0,则该数字为偶数。这可以使用位与操作符(&)进行检查。虽然这种方法是最快的(你做的是简单的位屏蔽而不是除法),但对于初学者来说可能有点高级/复杂。

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

这里我使用了位与操作符,并以选项2所示的简洁形式表示它。以选项1的形式(或者选项3的形式)重写它是留给读者的练习。,)

另一种方法是:

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

但最简单的方法仍然是:

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

就像郭怡广说的。

在Java中,它是%操作符: 15.17.3. 剩余运算符%

注意,在java.lang.Math类中还有floorMod,对于不同符号的参数,它会给出与%不同的结果:

floorMod (int x, int y)

对于非负整数,可以使用余数运算符%,而不是语义略有不同的模运算符。具体的例子是:

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

这可以简化为一行代码:

isEven = (a % 2) == 0;