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++?
我试图找出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
最后,您的任务只是检查偶数或奇数值。
相关文章:
- 使用枚举作为条件,if 条件将返回什么,真或假?
- 什么可以用来替换代码中的循环和 if 语句?
- 这个 FOR-IF 循环的解释是什么?
- if(i | j) 和 if (i & j) 在C++中做什么
- 在 if 语句中处理多个 or 的更优雅的方法是什么
- de if-Block 是什么意思
- if 语句正在检查什么条件
- 有什么更好的表现?IF或正常循环的不定循环
- if(!pointer) 和 if(!*pointer) 有什么区别?
- 前循环后的if stategent是什么意思
- C++:无论如何,有什么可以知道是什么触发了 If 语句
- 关于"if" "elseif" "else"陈述的良好做法是什么
- 在 c++ 中使用两个 if 有什么区别吗
- 不必要的 else 语句:当可以使用 IF 时,使用 ELSE IF 有什么缺点吗?
- "[Error] expected unqualified-Id before 'if'"这个代码块是什么意思
- 打印此矩阵的 if 语句是什么
- 我的 if 语句逻辑出了什么问题?
- 同时执行 if 和 else 条件的逻辑是什么
- if(NULL==指针)和if(指针==NULL)之间有什么区别
- 这个IF语句有什么问题吗?(C++)