Luk*_*uke 8 c++ bitwise-operators
我试图找到,如果x从右边是"第一个位1,所以我检查的价值x^1是1.然而,
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)).
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |