我正在尝试查找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),请使用括号)。

07-24 09:51
查看更多