C++中(x == 1)与(x & 1)是否等价?二者使用场景有何区别?
这两个写法的效果完全不一样!听我给你讲明白
嘿,你这个误解挺常见的,我来给你拆解清楚:
首先,if (x & 1)里的&不是你说的“引用对象”的用法——在C/C++里&有好几种用途,这里它是按位与运算符,不是引用符号。
它的作用是拿x的二进制和数字1的二进制做按位与运算:
- 数字1的二进制最后一位是1,其余位都是0
- 按位与的规则是:只有对应位都为1时,结果位才是1,否则是0
- 所以
x & 1最终只会保留x二进制的最后一位:如果x是奇数,最后一位是1,结果就是1(非零值在if条件里会被判定为true);如果x是偶数,最后一位是0,结果就是0(判定为false)
简单说,if (x & 1)是用来判断x是不是奇数,不管x是3、5、-1这类奇数,条件都会成立。
而if (x == 1)就很直接了:只有当x严格等于1的时候,条件才会成立。比如x=3时,3 &1会返回true,但3 ==1返回false;x=-1时,-1 &1返回true,但-1 ==1显然是false。
举几个具体例子更清楚:
- 当x=5:
5 &1→ 二进制101 & 001 = 001→ 结果1 → if条件成立;5==1→ false → 条件不成立 - 当x=2:
2&1→ 二进制10 & 01=00→ 结果0 → 条件不成立;2==1→ false → 条件不成立 - 当x=-3:
-3&1→ 补码最后一位是1 → 结果1 → 条件成立;-3==1→ false → 条件不成立
所以你觉得二者效果相同的想法是有误的,它们的使用场景完全不同:
- 如果你想判断x是否为奇数,用
x&1(这个写法还比x%2==1更高效,因为位运算比取模快) - 如果你只想判断x是不是等于1,才用
x==1
内容的提问来源于stack exchange,提问作者tomh1012
相关产品推荐
相关产品推荐

