我最近看到一个开源程序,有人用过
if (x & 1){
其中x是int。我自己试了一下,据我所知,这对我们使用
有同样的效果if (x == 1){
据我所知,&
符号用于引用对象,但在这里它似乎被用作等于运算符。
我错误地认为这些是一回事吗?或者有不同的理由使用每一个?
答案 0 :(得分:6)
语句x & 1
使用按位和运算符,换句话说,在二进制级别上逐位比较这两个值。 ==
比较用于测试等价,换句话说,所有位都相同。
x & 1
做的是检查1s位中的位是否设置为1.对于任何无符号x
,任何奇数值都将显示为true,因为任何奇数值都设置了该位。
答案 1 :(得分:1)
这里的&
运算符是按位和。它将两个操作数的二进制表示和每个位的and
成为结果。例如:(假设以下数字都是二进制表示)
10010111 & 00111011
会导致:
00010011
它可以有效地用于"检查"查看特定的一组位是否是" set"在操作数中,如果它们是,则结果将为非零(即足以传递if
语句)。
鉴于此,此代码很可能不检查x == 1
,而是检查x
的第一位是否已设置。