C++ C++;位运算
我对两个整数的单个位进行操作(我在Ubuntu机器上使用g++进行编译) 在一些中间步骤中,我将位表示为C++ C++;位运算,c++,c,bit-manipulation,C++,C,Bit Manipulation,我对两个整数的单个位进行操作(我在Ubuntu机器上使用g++进行编译) 在一些中间步骤中,我将位表示为 q = 11000000000000000000000000000000 q_1 = 00000000000000000000000000000001 现在我想检查q和q_1的单位位置是否相同。因此,我在if条件下检查(*q)&1==q_1,其工作正常 但每当我想检查q的单位位置是0,q_1的单位位置是1时,我想我应该做(*q)&1==0)和&(q_1==1),但结果并不像预期的那样。为了
q = 11000000000000000000000000000000
q_1 = 00000000000000000000000000000001
现在我想检查q和q_1的单位位置是否相同。因此,我在if条件下检查(*q)&1==q_1
,其工作正常
但每当我想检查q的单位位置是0,q_1的单位位置是1时,我想我应该做(*q)&1==0)和&(q_1==1)
,但结果并不像预期的那样。为了进行调试,我分别计算(*q)&1==0)
和(q_1==1)
的值,并将它们打印为1
。但是,(*q)&1==0)和&(q_1==1)
的值被打印为0。为什么?
在函数中,Q是引用传递的,所以我用*Q来获得C…和C++中的值…< /p> ,位<代码> > />代码>操作符实际上比等价操作符<代码>=具有更低的优先级。您需要将位运算符括在括号中
因此:
应该是:
(((*q)&1)==0) && (q_1==1)
<>:< P>在C++和C++中,位<代码> > />代码>操作符实际上比等价操作符<代码>=具有更低的优先级。您需要将位运算符括在括号中
因此:
应该是:
(((*q)&1)==0) && (q_1==1)
请参阅:也(*q&1)==0&&q\u 1==1
就足够了。另外(*q&1)==0&&q\u 1==1
也就足够了。关于编辑:你的意思是,作为指针传递?如果它是作为引用传递的,那么您就不会使用*
。这是一个典型的错误,只要进行最少的研究,您就会知道原因:按位&的运算符优先级低于==。经验法则:如果您不知道所有运算符优先级规则的详细信息,请使用括号。很抱歉,我已经在(*q)
周围使用了很多括号,因为不知道优先级,因为和的两个操作数都是1
而我仍然将0
作为输出…@hyde,是的,作为指针传递…函数定义说voidfunc(int*q,int*m)
总是在位运算符周围使用括号。它们的优先级不是您自然期望的(&
,^
,|
位于比较运算符的错误一侧,可能是因为它们与逻辑运算符混淆),或者不清楚(
)。关于您的编辑:您的意思是,作为指针传递?如果它是作为引用传递的,那么您就不会使用*
。这是一个典型的错误,只要进行最少的研究,您就会知道原因:按位&的运算符优先级低于==。经验法则:如果您不知道所有运算符优先级规则的详细信息,请使用括号。很抱歉,我已经在(*q)
周围使用了很多括号,因为不知道优先级,因为和的两个操作数都是1
而我仍然将0
作为输出…@hyde,是的,作为指针传递…函数定义说voidfunc(int*q,int*m)
总是在位运算符周围使用括号。它们的优先级不是您自然期望的(&
,^
,|
位于比较运算符的错误一侧,可能是因为它们与逻辑运算符混淆),或者不清楚(
)。