Java:如何在不使用除法或模运算符的情况下查找整数是否是2的倍数

时间:2014-09-03 01:40:00

标签: java

modulo运算符Java, Check if integer is multiple of a number

已对此进行了回答

我想知道是否有办法不使用divisionmodulo运算符。

这是我试图在线解决的面试问题的一部分

4 个答案:

答案 0 :(得分:6)

回想一下偶数的二进制表示将最低有效位设置为零。现在解决方案很简单:使用按位AND使用1屏蔽最后一位,并将结果与​​零进行比较。如果你得到零,那么数字是均匀的;不然,这很奇怪。

boolean isEven(int a) {
    return (a & 1) == 0;
}

执行a & 1时,得到的结果为1或0,具体取决于最后一位的值。对此的术语是“#34; bit masking"”在这种情况下,1用作位掩码。

答案 1 :(得分:3)

int i = 5;

if ((i & 0x1) == 0) {
  System.out.println("It's a multiple of 2");
} else {
  System.out.println("It's NOT a multiple of 2");
}

答案 2 :(得分:0)

你也可以使用移位,向右移一位并向后移,这也相当于除以2并向后移2

boolean isEven(int val){
    if(((val>>1)<<1) == val){
       return true;
    }
}

答案 3 :(得分:0)

一种简单的方法就是,

int no=5;
String str=""+no;

if((str.length()-1).equals("2")||(str.length()-1).equals("4")||(str.length()-1).equals("6")||(str.length()-1).equals("8")||(str.length()-1).equals("0")||) 
  System.out.println("Yes");
  System.out.println("No");

就这么简单。希望它有所帮助。