是否有可能判断哪个数组元素比较结果为真?

is it possible to tell which array element comparison resulted in true?

本文关键字:结果 比较 数组元素 有可能 判断 是否      更新时间:2023-10-16

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

   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;

还是有其他的方法?

您必须单独测试它们以知道哪个结果为真。下面是一个使用逻辑或而不是按位或来确定哪个结果为真的示例。

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。假设数组只包含二进制值(0或1)if ( (0 | 0 )& 1 ! = 1)为真,bit_array或bit_mask的其他情况使语句为假!!


如果数组可以包含0或1以外的值,则既不能说x=0的数组内容也不能说x=1的数组内容使语句为真。它是两者的关联:

一个简单的例子,如果你在条件为真时写if((0x0F | 0xF0) == 0), 0x0F或0xF0都不会使它为真!

在你的if语句中也是一样的