作为伪代码的一个例子:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
Run Code Online (Sandbox Code Playgroud)
Cod*_*tch 348
对于非负整数,可以使用余数运算符%.您的确切示例:
if ((a % 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
Run Code Online (Sandbox Code Playgroud)
这可以简化为单行:
isEven = (a % 2) == 0;
Run Code Online (Sandbox Code Playgroud)
mar*_*ime 110
以下是最小Java代码中伪代码的表示;
boolean isEven = a % 2 == 0;
Run Code Online (Sandbox Code Playgroud)
我现在将其分解为其组件.Java中的模数运算符是百分比字符(%).因此,获取int%int将返回另一个int.double equals(==)运算符用于比较值,例如一对int并返回一个布尔值.然后将其分配给布尔变量'isEven'.根据运算符优先级,将在比较之前评估模数.
Rob*_*ick 92
由于其他人已经给出了答案,我将添加一些额外的背景.%"模数"运算符实际上执行余数运算.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
}
Run Code Online (Sandbox Code Playgroud)
第二种方法更好地利用了语言,并导致更简洁的代码.(不要忘记==运算符返回一个布尔值.)
// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);
Run Code Online (Sandbox Code Playgroud)
第三种方法是完整性,并使用三元运算符.虽然三元运算符通常非常有用,但在这种情况下,我认为第二种方法更优越.
// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;
Run Code Online (Sandbox Code Playgroud)
第四种也是最后一种方法是使用整数二进制表示的知识.如果最低有效位为0,则数字为偶数.这可以使用按位和运算符(&)进行检查.虽然这种方法是最快的(你做的是简单的位掩码而不是分割),但对于初学者来说它可能有点先进/复杂.
// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
Run Code Online (Sandbox Code Playgroud)
在这里,我使用了bitwise-and运算符,并以选项2中显示的简洁形式表示它.在选项1的表单中重写它(以及选项3的表单)作为练习留给读者.;)
希望有所帮助.
小智 32
要使Java的%(REM)操作像MOD一样用于负X和正Y值,您可以使用此方法:
private int mod(int x, int y)
{
int result = x % y;
if (result < 0)
{
result += y;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
或者使用三元运算符(在某些情况下更短,但不可能或效率更低):
private int mod(int x, int y)
{
int result = x % y;
return result < 0? result + y : result;
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*n T 12
虽然可以通过检查值是否为负值来进行正确的模数,如果是(正如许多人所建议的那样),则可以更正它,但是有一个更紧凑的解决方案.
(a % b + b) % b
Run Code Online (Sandbox Code Playgroud)
这将首先进行模数,将值限制为-b - > + b范围,然后添加b以确保该值为正,让下一个模数将其限制为0 - > b范围.
注意:如果b为负数,结果也为负数
Gre*_*les 11
Java实际上没有C语言的模运算符.Java中的%是余数运算符.在正整数上,它的工作方式与模数完全相同,但它在负整数上的工作方式不同,与模数不同,它也可以用于浮点数.尽管如此,除了正整数之外,很少使用%,所以如果你想把它称为模数,那么请随意!
小智 11
不使用modulo,代码运行得更快:
public boolean isEven(int a){
return ( (a & 1) == 0 );
}
public boolean isOdd(int a){
return ( (a & 1) == 1 );
}
Run Code Online (Sandbox Code Playgroud)
正如其他人指出的那样,%(余数)运算符与数学
mod模数运算/函数不同。
mod对比%该
x mod n函数映射x到n范围内[0,n)。
而x % n运算符映射x到n的范围内(-n,n)。
为了有一种使用数学模数运算而不关心前面的符号的方法x可以使用:
((x % n) + n) % n
Run Code Online (Sandbox Code Playgroud)
也许这张图片有助于更好地理解它(我第一次很难理解它)
在 Java 中,它是%运算符:
15.17.3。剩余操作员 %
请注意,也有floorMod在java.lang.Math这将给来自不同的结果类%的符号不同的参数:
public static int floorMod?(int x, int y)
| 归档时间: |
|
| 查看次数: |
906819 次 |
| 最近记录: |