布尔“(number&1)== 0”是什么意思?

在CodeReview上,我发布了一段有效的代码,并要求改进的技巧。我得到的是使用一种布尔方法来检查ArrayList是否具有偶数个索引(这是必需的)。这是建议的代码:

private static boolean isEven(int number)

{

return (number & 1) == 0;

}

因为我已经困扰了该特定用户很多帮助,所以我决定是时候该困扰SO社区了!我真的不明白这是如何工作的。调用该方法,并以ArrayList的大小作为参数(即ArrayList有十个元素,数字=

10)。

我知道有一个&数字与1进行比较,但此后我迷路了。

我的阅读方式是,如果number == 0和,则返回true 1 == 0。我知道第一个是不正确的,而后者显然是没有意义的。有人可以帮我吗?

回答:

请记住,“&”是按位运算。您可能已经意识到了这一点,但是根据您提出问题的方式,这对我来说还不是很清楚。

就是说,理论上的想法是您有一个int,可以用一些1和0的序列以位表示。例如:

...10110110

在二进制中,因为它是基数2,所以当数字的按位版本以0结尾时,它是偶数,而当以1结尾时,它是奇数。

因此,对以上内容按1与1进行按位运算是:

...10110110 & ...00000001

当然,它是0,所以您可以说原始输入是偶数。

或者,考虑一个奇数。例如,将1加到上面的值上。然后

...10110111 & ...00000001

等于1,因此不等于零。瞧

以上是 布尔“(number&1)== 0”是什么意思? 的全部内容, 来源链接: utcz.com/qa/407792.html

回到顶部