如何确定一个给定的数字是偶数还是奇数?我已经很长时间想弄清楚这个问题,但一直没有头绪。
你可以使用取模运算符,但这可能会较慢。如果这是一个整数,你可以这样做:
if ( (x & 1) == 0 ) { even... } else { odd... }
这是因为奇数的低位始终为1。
if ((x % 2) == 0) {
// even
} else {
// odd
}
如果你除以2的余数为0,则是偶数。%
是获取余数的运算符。
(A % B)
本身可以被用作表达式,这时就很有趣了。 - Stefan Kendall求余运算符 % 可以给出被除数除以某个数后的余数。
如果 n % 2 == 0
,那么当 n 是偶数时返回真,当 n 是奇数时返回假。
每个偶数都可以被2整除,无论它是十进制还是小数(但小数部分如果存在也必须是偶数)。因此您可以使用 %
(取模)运算符,它将左边的数字除以右边的数字并返回余数...
boolean isEven(double num) { return ((num % 2) == 0); }
public static boolean isOdd(int i) {
return i % 2 == 1;
}
但正如书中所提到的:
当余数运算返回非零结果时,它与其左操作数具有相同的符号
因此,通常情况下,当我们有负奇数时,i%2
的结果将不是1
而是-1
。因此,我们可以使用@Camilo的解决方案或者只需执行以下操作:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
Math.floorMod(int x, int y);
,它处理负被除数很好,但如果除数为负数,则可能会返回-1
。最低有效位(最右侧)可用于检查数字是偶数还是奇数。 对于所有奇数,在二进制表示中,最右侧的位始终为1。
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
适用于正数或负数
int start = -3;
int end = 6;
for (int val = start; val < end; val++)
{
// Condition to Check Even, Not condition (!) will give Odd number
if (val % 2 == 0)
{
System.out.println("Even" + val);
}
else
{
System.out.println("Odd" + val);
}
}
/**
* Check if a number is even or not using modulus operator.
*
* @param number the number to be checked.
* @return {@code true} if the given number is even, otherwise {@code false}.
*/
public static boolean isEven(int number) {
return number % 2 == 0;
}
/**
* Check if a number is even or not using & operator.
*
* @param number the number to be checked.
* @return {@code true} if the given number is even, otherwise {@code false}.
*/
public static boolean isEvenFaster(int number) {
return (number & 1) == 0;
}
下面的程序可以处理大数(数字位数大于20)
package com.isEven.java;
import java.util.Scanner;
public class isEvenValuate{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String digit = in.next();
int y = Character.getNumericValue(digit.charAt(digit.length()-1));
boolean isEven = (y&1)==0;
if(isEven)
System.out.println("Even");
else
System.out.println("Odd");
}
}
122873215981652362153862153872138721637272
Even
n % 2 == 0
的语义是“除以2并检查余数是否为0”,比起n & 1 == 0
更加清晰,后者的意思为“所有位数都变成0,只有最低位数保持不变,然后检查结果是否为0”。第一个表达式更加清晰,即使可能会有一点点的额外开销。这就是我所说的过早优化。如果某些代码很慢,在那部分进行性能分析,将n % 2
改为n & 1
是合理的,但提前做这个优化是不必要的。通常在性能分析之前使用位运算符是一个坏主意。" - dtechn % 2 == 0
比n & 1 == 0
更加简洁。 - crush