在真值表上填写 n 个输入值

Fill n input values on a truth table

提问人:Aidan Goldfarb 提问时间:12/1/2019 更新时间:12/1/2019 访问量:269

问:

我需要一种算法来生成大小为 n 的真值表的所有初始布尔值。

例如)

Size = 1: 1)T F
Size = 2: 1)T T F F  2)T F T F
Size = n: ?

格式现在并不重要,但理想情况下是:

for(int i = 0; i<n; i++){
   //do something 
}

我的最终目标是对所有可能的值运行布尔电路的完整测试。该电路已正确实现,但我需要一种方法来测试接受 n 个输入的电路上输入的所有排列。因此,结束函数如下所示:

static void completeTest(Circuit *circuit){
    double num_inputs = getNumInputs(circuit);
    double perm = pow(2,num_inputs);
    for(int i = 0; i<perm; i++){
       //do something
    }
}
C 布尔逻辑 电路

评论


答:

1赞 goodvibration 12/1/2019 #1

试试这个:

char values[] = {'F', 'T'};
unsigned long long perm = 1ULL << n;
for (unsigned long long i = 0; i < perm; i++) {
    for (unsigned int j = 0; j < n; j++) {
        printf("%c",values[(i >> j) & 1]);
    }
    printf("\n");
}

评论

0赞 Aidan Goldfarb 12/1/2019
哦,很有帮助,谢谢。有没有地方可以阅读更多关于该算法的信息?
0赞 goodvibration 12/1/2019
@AidanGoldfarb:这不是一个算法。我只是迭代位并输出 'F' 表示 0,输出 'T' 表示 1。