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

What is the difference between if(x^1!=1) and if(int(x^1)!=1) in C++?

本文关键字:if 什么 区别 int C++      更新时间:2023-10-16

我试图找出x从右起的第一位是否1,所以我检查x^1的值是否1。然而

int x=6; 
if (x^1!=1) 

给出错误的答案,但是

if (int(x^1)!=1) 

给出正确答案。

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

这是运算符优先级的陷阱。运算符优先级确定操作如何"分组"(例如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),请使用括号)。

简单地说,!=(不等于关系运算符)的优先级高于^(XOR按位运算符)。检查优先级

int x=6;

案例1:if (x^1!=1)

首先,1!=1 is 0;然后6^0= 6。( 110 ^ 000 = 110 );检查异或表

案例2:if (int (x^1)!=1)

首先,x^1= 7;然后7!=1 is 1(真)。

@Cornstalks的回答是正确的。

我只是想到了这一点(它实际上并没有回答你的问题,但可以使其更具可读性):

解决此问题的另一种方法是简单地使用模运算符:

if(x%2 == 0)  // then first bit is 0
else  // first bit is 1 

最后,您的任务只是检查偶数或奇数值。