寻找奇数/偶数

时间:2016-03-15 20:02:38

标签: java

我已经获得了一些练习的示例代码,它显示了如何查找整数是奇数还是偶数。

int x = 4;

    if ( (x & 1) == 0 ) 

    {
        System.out.println("even");
    }
    else
    {
        System.out.println("odd");
    }

但是我不明白你为什么这样做' x& 1'。那个目的是什么?

6 个答案:

答案 0 :(得分:2)

在数字的二进制表示中,任何最低有效位设置为0的数字都是偶数。了解&运算符的作用也很有帮助。

例如5 = 0101(二进制)和1 = 0001(二进制)。在这种情况下,它会将01010001进行比较。

你按位比较,所以第一位是1 & 0 = 0。第二位是0 & 0 = 0。第三位是0 & 0 = 0。最后一位是1 & 1 = 1

所以5 & 1 = 0001,小数为11 == 0的{​​{1}}评估为false。

对于所有其他偶数,最低有效数字为x = 5,因此任何偶数0将始终评估为& 1

答案 1 :(得分:0)

二进制数的LSB保存有关奇偶校验的信息,

任何奇数都有LBS == 1且任何偶数都有LSB == 0

所以,当你按位进行并逐渐增加时 反对1,这个的porpouse是清除所有其他位,但是就像它一样离开LSB(这就是为什么将1乘以1)

enter image description here

答案 2 :(得分:0)

它评估变量的二进制值

让我们说x = 6(二进制为110)和y = 7111

因为我们知道1&0=01&1=1(或true&false=falsetrue&true=true

x & 1 == 0 // evaluates to true if x is even because

 110
&001
----
 000

y & 1 == 0 // evaluates to false because

 111
&001
----
 001

答案 3 :(得分:0)

这是因为&执行按位AND操作:

if ( (x & 1) == 0 )

你的代码就像说,打印"奇怪"如果 x 最后一位二进制数 1.

它会起作用,因为所有奇数将始终以1作为最后一位二进制数字。

考虑一下:

1 is 0001 in binary.
2 is 0010 in binary.

当(0001& 0010)只有那些与1匹配的位置将保持为1时,这意味着:

0001 & 0010 gives you 0000 (0)  // 1 & 2 = 0

看看这种模式:

0001 & 0001 = 1  //1 & 1 = 1 (is odd)
0010 & 0001 = 0  //2 & 1 = 0 (is even)
0011 & 0001 = 1  //3 & 1 = 1 (is odd)
0100 & 0001 = 0  //4 & 1 = 0 (is even)
0101 & 0001 = 1  //5 & 1 = 1 (is odd)
0110 & 0001 = 0  //6 & 1 = 0 (is even)

答案 4 :(得分:0)

它是两个数字的二进制表示之间的按位AND运算。奇数始终设置为1位。偶数也没有。

因此,对于偶数,&符号AND == 0是正确的,但对于奇数则不是。

http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm

答案 5 :(得分:0)

无论二进制数是奇数,还是仅通过查看有效位(无论是否设置)(1或0),都可以轻松地识别出该二进制数。如果最低有效位为1,则为奇数,否则为偶数。 只需检查(%10)是否为真,奇数或偶数即可。