作为伪代码中的一个例子:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
作为伪代码中的一个例子:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
当前回答
在不使用模运算的情况下,代码运行得更快:
public boolean isEven(int a){
return ( (a & 1) == 0 );
}
public boolean isOdd(int a){
return ( (a & 1) == 1 );
}
其他回答
虽然可以通过检查值是否为负并纠正它(许多人建议的方法)来进行适当的模运算,但还有一个更紧凑的解决方案。
(a % b + b) % b
这将首先进行模运算,将值限制在-b -> +b范围内,然后加上b以确保值为正,让下一个模运算将其限制在0 -> b范围内。
注:如果b为负数,结果也是负数
下面是用最少的Java代码表示的伪代码;
boolean isEven = a % 2 == 0;
现在我将把它分解成各个部分。Java中的模运算符是百分比字符(%)。因此,取一个int % int返回另一个int。双等号(==)操作符用于比较值,例如一对int,并返回一个布尔值。然后将其分配给布尔变量'isEven'。根据运算符优先级,在比较之前计算模量。
正如其他人指出的那样,%(余数)操作符与数学上的操作符不同 模量运算/函数。
Mod vs % x mod n函数在[0,n)范围内将x映射到n。 而x % n操作符在(-n,n)范围内将x映射到n。
为了有办法用数学上的模运算和不运算 关心x前面的符号1可以用:
((x % n) + n) % n
也许这张图有助于更好地理解它(我一开始很难理解它)
为了让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;
}
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;
}