Вы должны проверить их индивидуально, чтобы узнать, какой из них привел к истине.Вот пример использования логического, а не побитового ИЛИ, чтобы определить, какой из них привел к истине.
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;
}