Java:如何在不使用除法或模运算的情况下确定整数是2的倍数

Java:如何在不使用除法或模运算的情况下确定整数是2的倍数,java,Java,这里的模运算符回答了这个问题 我想知道是否有一种方法不使用除法或模运算运算符 这是我试图在线解决的一个面试问题的一部分,我想说的是偶数的二进制表示法的最低有效位设置为零。现在解决方法很简单:使用按位AND将最后一位屏蔽为1,并将结果与零进行比较。如果你得到一个零,这个数字是偶数;否则,这就很奇怪了 boolean isEven(int a) { return (a & 1) == 0; } 执行a&1时,根据最后一位的值,得到的结果为1或零。这方面的行话是“位掩码”:在本例中,

这里的
运算符回答了这个问题

我想知道是否有一种方法不使用
除法
模运算
运算符


这是我试图在线解决的一个面试问题的一部分,我想说的是偶数的二进制表示法的最低有效位设置为零。现在解决方法很简单:使用按位AND将最后一位屏蔽为
1
,并将结果与零进行比较。如果你得到一个零,这个数字是偶数;否则,这就很奇怪了

boolean isEven(int a) {
    return (a & 1) == 0;
}
执行
a&1
时,根据最后一位的值,得到的结果为1或零。这方面的行话是“位掩码”:在本例中,
1
用作位掩码

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"); } int i=5; 如果((i&0x1)==0){ System.out.println(“它是2的倍数”); }否则{ System.out.println(“它不是2的倍数”); }
您还可以使用移位位、向右移位一位和向后移位,这也相当于除以2再乘以2

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

如果(((val>>1)一个简单的方法是

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");

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

它只讨论使用那些运算符hint1-你如何通过查看数字来实现它?Hint2-查看最后一个数字。你能解释一下吗?
0x1
?它是以十六进制为基数的
1
。在这种情况下,它与
1
相同,但使用十六进制表示法。在执行bitw时ise的东西更容易使用十六进制表示法,但在这种情况下可能是矫枉过正。只是习惯了它。+1表示十六进制,目前被高度低估的表示法这有点像罗宾汉的谷仓,但如果他们想看到几种不同的技术,这可能是其中之一。