我需要编写一个函数,该函数将一个整数(表示真值表中的一行)和一个 bool(boolean) 数组作为参数作为参数,在其中存储真值表的该行的值。

这是真值表示例

Row| A | B | C |
 1 | T | T | T |
 2 | T | T | F |
 3 | T | F | T |
 4 | T | F | F |
 5 | F | T | T |
 6 | F | T | F |
 7 | F | F | T |
 8 | F | F | F |

请注意,给定的真值表可能具有比该表更多或更少的行,因为可能的变量数量会改变。

函数原型(prototype)可能看起来像这样
getRow(int rowNum, bool boolArr[]);

例如,如果调用此函数,则为
getRow(3, boolArr[])

它需要返回一个包含以下元素的数组
|1|0|1|    (or |T|F|T|)

对我来说,出现困难的原因是变量的数量可以更改,因此增加或减少了行数。例如,变量列表可以是A,B,C,D,E和F,而不仅仅是A,B和C。

我认为最好的解决方案是编写一个循环,该循环计数到行号,并从本质上改变数组的元素,就像它以二进制计数一样。以便
1st loop iteration, array elements are 0|0|...|0|1|
2nd loop iteration, array elements are 0|0|...|1|0|

我一辈子都想不出办法,也找不到网络上其他地方的解决方案。抱歉给您带来的困惑,感谢您的帮助

最佳答案

好了,现在您重写了您的问题,使它更清楚了。首先,getRow需要接受一个额外的参数:位数。具有2位的第1行产生的结果与具有64位的第1行产生的结果不同,因此我们需要一种区分该结果的方法。其次,通常在C++中,所有内容都是零索引的,因此我将把您的真值表下移一行,以使“0”行返回所有true

这里的关键是要意识到二进制文件中的行号已经是您想要的。采取这一行(已从4移到3):

3 | T | F | F |

二进制文件中的3011,而相反的是{true, false, false}-正是您想要的。我们可以使用按位或来表示该数组:
{!(3 | 0x4), !(3 | 0x2), !(3 | 0x1)}

因此,只需将其编写为循环即可:
void getRow(int rowNum, bool* arr, int nbits)
{
    int mask = 1 << (nbits - 1);
    for (int i = 0; i < nbits; ++i, mask >>= 1) {
        arr[i] = !(rowNum & mask);
    }
}

关于c++ - 检索具有非恒定数量变量的真值表的单行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28059354/

10-11 16:04