C ++(x == 1)与(x& 1)相同

时间:2018-05-17 20:36:58

标签: c++

我最近看到一个开源程序,有人用过

if (x & 1){

其中x是int。我自己试了一下,据我所知,这对我们使用

有同样的效果
if (x == 1){

据我所知,&符号用于引用对象,但在这里它似乎被用作等于运算符。

我错误地认为这些是一回事吗?或者有不同的理由使用每一个?

2 个答案:

答案 0 :(得分:6)

语句x & 1使用按位和运算符,换句话说,在二进制级别上逐位比较这两个值。 ==比较用于测试等价,换句话说,所有位都相同。

x & 1做的是检查1s位中的位是否设置为1.对于任何无符号x,任何奇数值都将显示为true,因为任何奇数值都设置了该位。

答案 1 :(得分:1)

这里的&运算符是按位和。它将两个操作数的二进制表示和每个位的and成为结果。例如:(假设以下数字都是二进制表示)

10010111 & 00111011

会导致:

00010011

它可以有效地用于"检查"查看特定的一组位是否是" set"在操作数中,如果它们是,则结果将为非零(即足以传递if语句)。

鉴于此,此代码很可能检查x == 1,而是检查x的第一位是否已设置。