给定n
个变量我想创建小数,它等于真值表中所有可能的二进制变量。 e.g。
对于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 :(得分:0)
我找到了一个解决方案,但它需要一个嵌套循环,这并不理想,因为这意味着随着vars
数组的增长,计算时间会呈指数级增长。
我开始认为没有循环就不可能。
这是我的最终代码。我不知道如何把它写成数学公式,所以我不会打扰。
var vars = ["a", "b", "c"];
var bins = [];
for (var i = 0; i < vars.length; i++) {
var rows = 1 << vars.length;
var max = (1 << rows) - 1;
var diff = (1 << ((rows) / (2 << i))) - 1;
var output = max - diff;
var iterations = (1 << i);
var step = 1 << (vars.length - i);
for (var j = 1; j < iterations ; j++) {
output -= (diff << (step * j));
}
bins[i] = output;
console.log(bins[i].toString(2));
}