在C++中,if(x ^ 1!= 1)和if(int(x ^ 1)!= 1)之间有什么区别?

Luk*_*uke 8 c++ bitwise-operators

我试图找到,如果x从右边是"第一个位1,所以我检查的价值x^11.然而,

int x=6; 
if (x^1!=1) 
Run Code Online (Sandbox Code Playgroud)

给出了错误的答案,但是

if (int(x^1)!=1) 
Run Code Online (Sandbox Code Playgroud)

给出了正确的答案.

我不知道为什么.有人可以为我澄清一下吗?

Cor*_*lks 13

这是运营商优先权的陷阱.运算符优先级确定如何操作"分组"(等如何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不一样.

如果您的目标是检查第一位,我可能会建议使用按位AND(&).然后你可以这样做if (x & 1)(但要注意,混合&==导致与之前相同的问题,所以如果你想写,请使用括号if ((x & 1) == 1)).