我正在尝试查找x
的右起第一位是否是1
,因此我检查x^1
的值是否是1
。然而,
int x=6;
if (x^1!=1)
给出错误的答案,但是
if (int(x^1)!=1)
给出正确的答案。
我不知道为什么。有人可以帮我澄清一下吗?
最佳答案
这是operator precedence的陷阱。运算符优先级确定如何“分组”操作(例如2*3+4
如何导致2*3
一起“分组”)。添加括号会更改事物的“分组”方式(例如,2*(3+4)
会使3+4
一起“分组”)。x^1!=1
等效于x^(1!=1)
,可以简化为x^0
。int(x^1)!=1
等效于(x^1)!=1
(因为您已在此处手动添加了括号; int
部分不是很相关;括号很重要)。
如您所见,x^(1!=1)
和(x^1)!=1
不同。
如果您的目标是检查第一位,我建议您使用按位与(&
)。然后,您可以只执行if (x & 1)
(但要注意,将&
和==
混合使用将导致与以前相同的问题,因此,如果要编写if ((x & 1) == 1)
,请使用括号)。