C++ 有符号和无符号整数、XNOR的位操作问题

C++ 有符号和无符号整数、XNOR的位操作问题,c++,cuda,C++,Cuda,我正在实现一个并行基数排序,我正在尝试对特定位索引处的位值进行扫描,以计算基数的偏移地址。我尝试分两次扫描,一次扫描“0”位值,另一次扫描“1”位值 我试图创建一个标志,表明我是否希望使用特定的位值。我将一个布尔标志传递到我的内核中,该标志说明我是要处理“0”还是“1”位,该标志称为doOnes。如果该标志为true,并且位值为1,那么我想将另一个标志useBit设置为true,以便我知道在内核中考虑它。如果标志为true,位值为0,那么我希望useBit标志为false 我可以确认我得到了正确

我正在实现一个并行基数排序,我正在尝试对特定位索引处的位值进行扫描,以计算基数的偏移地址。我尝试分两次扫描,一次扫描“0”位值,另一次扫描“1”位值

我试图创建一个标志,表明我是否希望使用特定的位值。我将一个布尔标志传递到我的内核中,该标志说明我是要处理“0”还是“1”位,该标志称为doOnes。如果该标志为true,并且位值为1,那么我想将另一个标志useBit设置为true,以便我知道在内核中考虑它。如果标志为true,位值为0,那么我希望useBit标志为false

我可以确认我得到了正确的位值。我的问题是下面的计算useVal

这是生产出来的产品

> BitVal1: 1  BitVal0: 0 
> BitVal1X: -2  BitVal0X: -1 
如何正确组合标志doOnes和位值以确定是否要使用它

编辑:

这是我想要的

doOnes  |  bitVal | useBit = XNOR(doOnes, bitVal)
------------------------------
true    |    0    |  false  
true    |    1    |  true
false   |    0    |  true
false   |    1    |  false
试试这个:

int useVal1 = (~(bitVal1 ^ (doOnes?1:0)))&1; // XNOR = ~(val1 ^ val2)
int useVal0 = (~(bitVal0 ^ (doOnes?1:0)))&1;
关于

一元运算符~反转所有位,您需要一元运算符!它反转布尔值

!(bitVal1 ^ doOnes)

很抱歉我已经更改了问题的变量名,以便于解释。在上面进行了编辑,现在正确了。对于BitVal1X,我希望为“0”或false,而对于BitVal0X,我希望为“1”或true。这仍然会产生与上面相同的输出。我更新了答案。问题是该操作是在int的所有32位上完成的。
!(bitVal1 ^ doOnes)