Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;位运算_C++_C_Bit Manipulation - Fatal编程技术网

C++ C++;位运算

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),但结果并不像预期的那样。为了

我对两个整数的单个位进行操作(我在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)&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,是的,作为指针传递…函数定义说void
func(int*q,int*m)
总是在位运算符周围使用括号。它们的优先级不是您自然期望的(
&
^
|
位于比较运算符的错误一侧,可能是因为它们与逻辑运算符混淆),或者不清楚(
)。关于您的编辑:您的意思是,作为指针传递?如果它是作为引用传递的,那么您就不会使用
*
。这是一个典型的错误,只要进行最少的研究,您就会知道原因:按位&的运算符优先级低于==。经验法则:如果您不知道所有运算符优先级规则的详细信息,请使用括号。很抱歉,我已经在
(*q)
周围使用了很多括号,因为不知道优先级,因为
的两个操作数都是
1
而我仍然将
0
作为输出…@hyde,是的,作为指针传递…函数定义说void
func(int*q,int*m)
总是在位运算符周围使用括号。它们的优先级不是您自然期望的(
&
^
|
位于比较运算符的错误一侧,可能是因为它们与逻辑运算符混淆),或者不清楚(
)。