什么';这是java中mod的语法

什么';这是java中mod的语法,java,modulo,Java,Modulo,以伪代码为例: if ((a mod 2) == 0) { isEven = true; } else { isEven = false; } 以下是伪代码在最小Java代码中的表示 boolean isEven = a % 2 == 0; 现在,我将把它分解为多个组件。Java中的模数运算符是百分比字符(%)。因此,取整数%int将返回另一个整数。双等于(=)运算符用于比较值,例如一对整数,并返回布尔值。然后将其分配给布尔变量“isEven”。根据运算符优先级,将在比较之前

以伪代码为例:

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

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

boolean isEven = a % 2 == 0;

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

模数运算符为%(百分号)。要测试均匀性或通常对2的幂进行模运算,还可以使用&(and运算符),如isEven=!(a&1)。

对于非负整数,可以使用余数运算符
%
,而不是语义稍有不同的模运算符。举个确切的例子:

if ((a % 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}
这可以简化为一个衬里:

isEven = (a % 2) == 0;

此外,mod可以这样使用:

int a = 7;
b = a % 2;

b
将等于1。因为
7%2=1

是@Cody代码的替代方案:

使用模数运算符:

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

我认为这比编写if/else稍微好一些,因为重复和未使用的灵活性更少。它确实需要更多的脑力来检查,但是
的好名字甚至可以弥补。

Java实际上没有C那样的模运算符在Java中是一个余数运算符。在正整数上,它的工作原理与模完全相同,但在负整数上的工作原理不同,并且与模不同,它也可以处理浮点数。尽管如此,在除正整数以外的任何整数上使用%还是很少见的,所以如果您想将其称为模,请放心

既然其他人都已经给出了答案,我将添加一点额外的上下文“模数”运算符实际上正在执行余数运算。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 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;
第四种也是最后一种方法是使用有关的知识。如果最低有效位为0,则数字为偶数。这可以使用(&)进行检查。虽然这种方法速度最快(您使用的是简单的位掩蔽而不是除法),但对于初学者来说,它可能有点高级/复杂

// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
在这里,我使用了按位and运算符,并用选项2中所示的简洁形式表示它。用选项1的形式(或者选项3的形式)重写它将留给读者作为练习。;)

希望这会有所帮助。

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

private int mod(int x, int y)
{
    int result = x % y;
    if (result < 0)
    {
        result += y;
    }
    return result;
}
私有整数模(整数x,整数y)
{
int结果=x%y;
如果(结果<0)
{
结果+=y;
}
返回结果;
}
或使用三元运算符(较短,但在某些情况下不可能或效率较低):

私有整数模(整数x,整数y)
{
int结果=x%y;
返回结果<0?结果+y:结果;
}

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;
}
public int mod(int i,int j)
{
int rem=i%j;
如果(j<0&&rem>0)
{
返回rem+j;
}
如果(j>0&&rem<0)
{
返回rem+j;
}
返回rem;
}

在不使用模运算的情况下,代码运行得更快:

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为负值,结果也将为负值

另一种方式是:

boolean isEven = false;
if((a % 2) == 0)
{
    isEven = true;
}
但最简单的方法仍然是:

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

就像@Steve Kuo所说的。

在Java中,它是
%
操作符:

请注意,
java.lang.Math
类中还有一个属性,它将为具有不同符号的参数提供与
%
不同的结果:


Java
中,可以按如下方式执行mod操作:

Math.floorMod(a, b)
a % b
注意: mod操作不同于余数操作。在
Java
中,余数操作可以这样执行:

Math.floorMod(a, b)
a % b

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

mod
vs
%
x mod n
功能将
x
映射到
n
范围内的
[0,n)

x%n
操作符将
x
映射到
n
范围内的
(-n,n)

为了有一个使用mathemat的方法
Math.floorMod(a, b)
a % b
((x % n) + n) % n