【发布时间】:2013-10-23 15:07:31
【问题描述】:
给定n 变量,我想创建等于真值表中所有可能的二进制变化的小数。例如
对于a,b 和c 让:
a = 11110000 (240)
b = 11001100 (204)
c = 10101010 (170)
对于p 和q 让:
p - 1100 (12)
q - 1010 (10)
我已经制定了一个公式来创建任何集合中的第一个数字,如下所示:
n = number of variables
x = 2^n
decimal = (2^x) - (2^(x/2));
我已经在 JavaScript 中这样实现了:
var vars = ["a", "b", "c"];
var bins = [];
for (var i = 0; i < vars.length; i++) {
var rows = 1 << vars.length;
bins[i] = (1 << rows) - (1 << ((rows) / 2));
console.log(bins[i].toString(2)); // logs 11110000
}
我不知道如何计算其余的数字,有人知道计算公式吗?
【问题讨论】:
-
如果您以十进制从 0 扫描到 n,则 toString(2) 转换应该会击中所有可能的组合。
-
@dandavis 这行不通。二进制中的 0 - 3 为
00、01、10、11。当然,我可以很容易地写出交替的 1 和 0,但是计算时间呈指数增长,这并不好。我想找到一个数学公式,这意味着我不必创建非常大的循环。
标签: javascript binary formula truthtable