关于模:Java中mod的语法是什么

What's the syntax for mod in java

以伪代码为例:

1
2
3
4
5
6
7
8
if ((a mod 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}

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

1
2
3
4
5
6
7
8
if ((a % 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}

可以简化为单线:

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

这是用最少的Java代码表示的伪代码;

1
boolean isEven = a % 2 == 0;

我现在将其分解为各个部分。 Java中的模运算符是百分比字符(%)。因此,采用int%int返回另一个int。双重等于(==)运算符用于比较值,例如一对整数,并返回布尔值。然后将其分配给布尔变量" isEven"。基于运算符优先级,将在比较之前评估模量。


由于其他所有人都已经给出了答案,因此我将添加一些其他上下文。 %"模数"运算符实际上正在执行余数运算。 mod和rem之间的区别很小,但很重要。

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

用"%"或rem运算符执行相同的操作将保持X值的符号。如果X为负,则结果范围为(-Y,0];如果X为正,则结果范围为[0,Y)。

通常,这种微妙的区别并不重要。回到您的代码问题,但是,有多种解决"均匀性"的方法。

第一种方法特别适合初学者,因为它特别冗长。

1
2
3
4
5
6
7
8
9
10
// Option 1: Clearest way for beginners
boolean isEven;
if ((a % 2) == 0)
{
  isEven = true
}
else
{
  isEven = false
}

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

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

这里的第三种方法是完整性的,它使用三元运算符。尽管三元运算符通常非常有用,但在这种情况下,我认为第二种方法更好。

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

第四种也是最后一种方法是使用整数的二进制表示形式的知识。如果最低有效位为0,则数字为偶数。可以使用按位与运算符(&)进行检查。尽管这种方法最快(您正在执行简单的位掩码而不是除法),但对于初学者来说可能有点高级/复杂。

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

在这里,我使用了按位与运算符,并以选项2中所示的简洁形式表示它。将其重写为选项1的形式(以及选项3的形式),供读者练习。 ;)

希望能有所帮助。


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

1
2
3
4
5
6
7
8
9
private int mod(int x, int y)
{
    int result = x % y;
    if (result < 0)
    {
        result += y;
    }
    return result;
}

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

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

尽管可以通过检查该值是否为负来进行适当的取模,然后将其校正为负(许多人建议的方式),但还有一个更紧凑的解决方案。

1
(a % b + b) % b

这将首先进行模运算,将值限制在-b-> + b范围内,然后添加b以确保该值是正数,让下一个模数将其限制在0-> b范围内。

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


该代码运行更快,无需使用模数:

1
2
3
4
5
6
7
public boolean isEven(int a){
    return ( (a & 1) == 0 );
}

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


Java实际上没有C那样的模运算符。 Java中的%是余数运算符。在正整数上,它的工作方式与模数完全相同,但在负整数上的工作方式不同,并且与模数不同,它也可以使用浮点数。尽管如此,在除正整数以外的任何东西上都很少使用%,因此,如果您想将它称为模数,那就放心吧!


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

您应该在使用"余数"运算符%之前检查规格:

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

1
2
3
4
5
6
7
8
9
10
11
12
// 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);

在Java中,它是%运算符:
15.17.3。余算符%

请注意,在java.lang.Math类中还存在floorMod,对于带有不同符号的参数,其结果与%有所不同:

public static int floorMod?(int x, int y)


另外,mod可以这样使用:

1
2
int a = 7;
b = a % 2;

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
}

另一种方法是:

1
2
3
4
5
boolean isEven = false;
if((a % 2) == 0)
{
    isEven = true;
}

但最简单的方法仍然是:

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

就像@Steve Kuo所说的那样。


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

mod vs %

The x mod n function maps x to n in the range of [0,n).
Whereas the x % n operator maps x to n in the range of (-n,n).

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

1
((x % n) + n) % n

也许这张照片有助于更好地理解它(我很难把头放在这上面)

enter image description here


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

1
Math.floorMod(a, b)

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

1
a % b

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


@Cody的代码的替代方法:

使用模运算符:

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

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


推荐阅读

    这句话有语法错误

    这句话有语法错误,点心,英语,本文目录这句话有语法错误瑞士最好的化妆品品牌有哪些请英语高手帮忙翻译点心英语怎么说这句话用英语该怎么

    伪代码描述算法

    伪代码描述算法,算法,描述,伪代码,自然语言,语言,编程语言,  伪代码是自然语言和类编程语言组成的混合结构。它比自然语言更精确,描述算法很简

    understand怎么用语法是什么

    understand怎么用语法是什么,形容词,动词,本文目录understand怎么用语法是什么understandable是什么意思understand的形容词是什么compreh

    java的运算符有哪些

    java的运算符有哪些,运算符,赋值运算符,算术运算符,输出,比较运算符,逻辑运算符,java的运算符分为:1、算术运算符,“+”,“-”,“*”,“/”,“%”,“++

    比较运算符有哪些

    比较运算符有哪些,运算符,语句,运算,表达式,用于,比较运算符,比较运算符有:=、“<=>”、“<> (!=)”、“<=”、“>=”、>、“IS NULL”、“IS NO

    三目运算符是什么

    三目运算符是什么,表达式,三目运算,条件运算符,条件,对象,语言,三目运算符详解对于有些选择分支结构,可以使用简单的条件运算符来代替。如:if(a<b

    js怎么取整数

    js怎么取整数,方法,数字,取整,语法,去除,四舍五入,js取整数的方法:1、通过“Math.trunc()”方法去除数字的小数部分,保留整数部分;2、通过“Math.r