我需要编写一个函数,该函数将一个整数(表示真值表中的一行)和一个 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 |
二进制文件中的
3
是011
,而相反的是{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/