我已经获得了一些练习的示例代码,它显示了如何查找整数是奇数还是偶数。
int x = 4;
if ( (x & 1) == 0 )
{
System.out.println("even");
}
else
{
System.out.println("odd");
}
但是我不明白你为什么这样做' x& 1'。那个目的是什么?
答案 0 :(得分:2)
在数字的二进制表示中,任何最低有效位设置为0
的数字都是偶数。了解&
运算符的作用也很有帮助。
例如5 = 0101
(二进制)和1 = 0001
(二进制)。在这种情况下,它会将0101
与0001
进行比较。
你按位比较,所以第一位是1 & 0 = 0
。第二位是0 & 0 = 0
。第三位是0 & 0 = 0
。最后一位是1 & 1 = 1
。
所以5 & 1 = 0001
,小数为1
。 1 == 0
的{{1}}评估为false。
对于所有其他偶数,最低有效数字为x = 5
,因此任何偶数0
将始终评估为& 1
。
答案 1 :(得分:0)
二进制数的LSB保存有关奇偶校验的信息,
任何奇数都有LBS == 1且任何偶数都有LSB == 0
所以,当你按位进行并逐渐增加时 反对1,这个的porpouse是清除所有其他位,但是就像它一样离开LSB(这就是为什么将1乘以1)
答案 2 :(得分:0)
它评估变量的二进制值
让我们说x = 6
(二进制为110
)和y = 7
(111
)
因为我们知道1&0=0
和1&1=1
(或true&false=false
和true&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)是否为真,奇数或偶数即可。