是否有可能判断哪个数组元素比较结果为真?
is it possible to tell which array element comparison resulted in true?
我有一个三维数组,我用它作为位表
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
语句中也是一样的
相关文章:
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 使用类似的比较函数时,在 c++ 中为 std:sort 获得不同的结果
- 比较整数提升后的结果
- C++:比较运算符>和字符串文本的意外结果
- yaml-cpp 比较的意外结果
- 我可以将比较结果用作C++的整数吗?
- 简单的程序比较阵列运行但给出不正确的结果
- 如何通过键和值以及在C 中的结果映射中比较两个地图?我们有任何STL API吗?
- 如何比较 C++ 和 MATLAB 之间的结果
- 在尝试提交作业警告时,我一直在警告:与未指定行为的字符串字面结果比较[-WADDRESS]
- 在将数组与字符数组进行比较后需要帮助输出一次结果
- 比较CPP和Python上的程序结果
- std::具有自定义比较函数结果的排序函数错误:必须调用对非静态成员函数的引用
- 如何使用SIMD比较两个字符向量并将结果存储为浮点值
- 比较两个具有相同值的 TCHAR 结果为 false
- 比较INT会产生奇怪的结果
- C 比较功能结果
- 将结果与用户输入-SQLITE3 C 进行比较
- 不等式比较结果 移至 C++11 时未使用的警告
- 为什么比较两个字符串的结果遗漏了最后匹配的字符串