C++ 是否可以判断哪个数组元素比较结果为真?

C++ 是否可以判断哪个数组元素比较结果为真?,c++,arrays,comparison,parallel-processing,C++,Arrays,Comparison,Parallel Processing,我有一个三维数组,我用它作为一个位表 char bit_table_[X][Y][Z]; X不大于20,但Y和Z将非常大。 每个X的Y和Z的内容将如下所示进行并行比较(这里Y和Z的实际值将使用一些散列函数进行计算)。 我的问题是;我不知道是否有任何方法可以告诉我们,在if语句的条件检查中,哪个X是真的 if (((bit_table_[0][i][bit_index / bits_per_char]| bit_table_[1][i][bit_index / bits_per_char]

我有一个三维数组,我用它作为一个位表

   char bit_table_[X][Y][Z];
X不大于20,但Y和Z将非常大。 每个X的Y和Z的内容将如下所示进行并行比较(这里Y和Z的实际值将使用一些散列函数进行计算)。 我的问题是;我不知道是否有任何方法可以告诉我们,在if语句的条件检查中,哪个X是真的

if (((bit_table_[0][i][bit_index / bits_per_char]|
bit_table_[1][i][bit_index / bits_per_char])& bit_mask[bit]) != bit_mask[bit])
     return true;

或者还有其他方法吗?

您必须单独测试它们,以了解哪一种方法是正确的。下面是一个使用逻辑而不是按位OR来确定哪一个结果为true的示例

bool x1 = false, x2 = false;

if(
   (x1 = (bit_table_[0][i][bit_index/bits_per_char] & bit_mask[bit]) != bit_mask[bit]) ||
   (x2 = (bit_table_[1][i][bit_index/bits_per_char] & bit_mask[bit]) != bit_mask[bit])
  )
{
    //Check x1 and x2 here
    return true;
}
编辑:

要扩展上一个示例,并满足原始帖子的结果,您还可以检查两者的结合是否是其通过的原因:

bool x1 = false, x2 = false, both = false;
size_t zindex = bit_index/bits_per_char;
if(
   (x1 = (bit_table_[0][i][zindex] & bit_mask[bit]) != bit_mask[bit]) ||
   (x2 = (bit_table_[1][i][zindex] & bit_mask[bit]) != bit_mask[bit]) ||
   (both = ((bit_table_[0][i][zindex] | bit_table_[1][i][zindex]) &
            bit_mask[bit]) != bit_mask[bit])
  )
{
    //Check x1 and x2 here
    //If both is true then neither x1 or x2 resulted in true alone

    return true;
}

问题的解决方案很简单:只有当x=0和x=1的数组内容具有相同的值:0时,if语句才为true。假设数组仅包含二进制值(0或1)
如果((0 | 0)&1!=1)
为真,则位数组或位掩码的所有其他情况都会使语句为假


如果数组可以包含0或1以外的其他值,则不能说x=0或x=1的数组内容使语句为真。这是他们两人的协会:

当条件为真时,如果写入
if((0x0F | 0xF0)==0)
,则0x0F或0xF0都不会使其为真!正是这两者的结合才使条件成为现实


在您的
if
语句中也是这样。

这一点并不清楚。首先,你说的“每个X的Y和Z”是什么意思?十、 Y和Z必须是常数。如果你想知道哪一个X“匹配”,为什么不简单地单独测试它们,而不是对它们进行排序并在过程中丢失这些信息呢?是的,Y和Z必须在编译时已知,所以你必须有一行,如
int Y=25
“#define Y 25”
@OliCharlesworth:每个“每个X的Y和Z”都意味着,对于X的所有值(X=0到X=max),阵列的所有相似位置Y和Z都创建并填充了阵列,没有问题,甚至并行ANDing也做得很好。问题是,如果有可能知道哪个X维度导致了true,但这与他的条件没有相同的结果。他正在做一点比较(
|
二进制或)而不是一个| |(或),但是问问题的方式听起来好像他想知道哪个X(0或1)导致表达式返回true。如果按位对它们进行ORing,则无法确定。这就是为什么我把它改为逻辑OR。如果这不是OP想要的,我将删除我的答案。也许他不太理解他写的条件。也许他打字出错了。。。他们中没有人能使这个条件成为真的,这是他们之间的联系…@乔:这正是我想做的。我仍然愿意寻找更多的方法(如果有的话)数组中每个x的coresponsing值是独立的。它们被分解成一个数组,只是为了进行并行运算。如果你仔细看过乔的答案,他只是对这些独立元素进行比较的结果。它仍然不会做我最初打算做的事。想想我的话。。。我认为你不能用算术运算从一个条件中得出两个条件