On CodeReview我发布了一段工作代码,并要求提供改进它的提示。我得到的一个方法是使用 boolean 方法来检查 ArrayList 是否具有偶数个索引(这是必需的)。这是建议的代码:
private static boolean isEven(int number)
{
return (number & 1) == 0;
}
由于我已经纠缠该特定用户以寻求很多帮助,因此我决定是时候纠缠 SO 社区了!我真的不明白这是如何工作的。该方法被调用,并将 ArrayList 的大小作为参数(即 ArrayList 有十个元素,number = 10)。
我知道一个 &
运行数字和 1 的比较,但之后我就迷路了。
按照我的阅读方式,如果 number == 0
和 1 == 0
则返回 true。我知道第一个不是真的,后者显然没有意义。有人可以帮帮我吗?
编辑:我可能应该补充一点,代码确实有效,以防有人想知道。
最佳答案
请记住,“&”是按位运算。您可能知道这一点,但根据您提出问题的方式,我并不完全清楚。
话虽如此,理论上的想法是你有一些 int,它可以通过一些 1 和 0 的序列以位表示。例如:
...10110110
在二进制中,因为它是以 2 为底,所以当数字的按位版本以 0 结尾时,它是偶数,而当它以 1 结尾时,它是奇数。
因此,用 1 对上述进行按位 & 是:
...10110110 & ...00000001
当然,这是0,所以你可以说原来的输入是偶数。
或者,考虑一个奇数。例如,将 1 添加到我们上面的内容中。那么
...10110111 & ...00000001
等于 1,因此不等于 0。瞧。
关于java - 这个 boolean 值 "(number & 1) == 0"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14905643/