首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个布尔值"(number & 1) == 0“是什么意思?

这个布尔值"(number & 1) == 0“是什么意思?
EN

Stack Overflow用户
提问于 2013-02-16 08:43:23
回答 9查看 16.3K关注 0票数 80

On CodeReview我发布了一段工作代码,并询问了改进它的技巧。我得到的一个方法是使用布尔方法来检查ArrayList是否具有偶数个索引(这是必需的)。下面是我们建议的代码:

代码语言:javascript
运行
复制
private static boolean isEven(int number)
{
    return (number & 1) == 0;
}

因为我已经纠缠过那个特定的用户以获得很多帮助,所以我决定是时候纠缠SO社区了!我真的不太明白这是怎么回事。该方法被调用,并将ArrayList的大小作为参数(即ArrayList有10个元素,数量= 10)。

我知道只有一个&同时运行数字和1的比较,但在那之后我就迷路了。

根据我的理解,它是说如果number == 01 == 0,则返回true。我知道第一个不是真的,而后者显然没有意义。有人能帮我吗?

编辑:我可能应该补充说,代码确实可以工作,以防有人想知道。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-02-16 08:49:17

请记住,"&“是一个按位运算。你可能已经意识到了这一点,但根据你提出问题的方式,我并不完全清楚。

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

代码语言:javascript
运行
复制
...10110110

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

因此,对上面的内容执行1的逐位&操作如下:

代码语言:javascript
运行
复制
...10110110 & ...00000001

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

或者,考虑一个奇数。例如,在上面的基础上加1。然后

代码语言:javascript
运行
复制
...10110111 & ...00000001

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

票数 115
EN

Stack Overflow用户

发布于 2013-02-16 09:08:51

您可以通过二进制表示中的最后一位来确定数字是偶数还是奇数:

代码语言:javascript
运行
复制
1 -> 00000000000000000000000000000001 (odd)
2 -> 00000000000000000000000000000010 (even)
3 -> 00000000000000000000000000000011 (odd)
4 -> 00000000000000000000000000000100 (even)
5 -> 00000000000000000000000000000101 (odd)
6 -> 00000000000000000000000000000110 (even)
7 -> 00000000000000000000000000000111 (odd)
8 -> 00000000000000000000000000001000 (even)

两个整数之间的&是按位AND运算符:

代码语言:javascript
运行
复制
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

所以,如果(number & 1) == 0true,这意味着number是偶数。

让我们假设number == 6,那么:

代码语言:javascript
运行
复制
6 -> 00000000000000000000000000000110 (even)

     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

1 -> 00000000000000000000000000000001

-------------------------------------

0 -> 00000000000000000000000000000000

以及当number == 7

代码语言:javascript
运行
复制
7 -> 00000000000000000000000000000111 (odd)

     &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

1 -> 00000000000000000000000000000001

-------------------------------------

1 -> 00000000000000000000000000000001
票数 70
EN

Stack Overflow用户

发布于 2013-02-16 08:45:00

&是按位AND运算符。&&是逻辑AND运算符

在二进制中,如果设置了数字位(即1),则该数字为奇数。

在二进制中,如果数字位为零,则数字为偶数。

(number & 1)是对数字位的逐位AND测试。

另一种方法(可能效率较低,但更容易理解)是使用模运算符%

代码语言:javascript
运行
复制
private static boolean isEven(int number)
{
    if (number < 0)
       throw new ArgumentOutOfRangeException();

    return (number % 2) == 0;
}
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14905643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档