我需要制定一个公式,为您提供可变数量列的真值表。
例子
将 FirstCell 替换为对包含第一个 2^1 值的单元格的静态引用,例如 $D$1 用于 4 位表(16 个值)并自动填充到网格的其余部分(在示例 A1:D16 中)
=IF(MOD(ROW()-ROW(FirstCell),POWER(2, ((COLUMN() - COLUMN(FirstCell)) * -1) + 1)) >= (POWER(2, ((COLUMN() - COLUMN(FirstCell)) * -1) + 1) / 2),1,0)
这背后的逻辑是:
如果当前行模数 2 power current column (* -1 as the first value is in the last column and + 1 because it from 0 start) 大于或等于 2 power current column 的一半,则将该值设为 1,否则将值设为 0。
当前推荐的答案对我不起作用。对于更简单的方法,我建议使用以下公式:
=IF(MOD(FLOOR((ROW()-ROW(TopRight))/(2^(COLUMN(TopRight)-COLUMN())), 1),2)=0,0,1)
TopRight
真值表右上角的单元格在哪里。
例如,如果您要创建一个包含 8 个以 开头的条目的真值表A3
,请将其替换TopRight
为$H$3
,然后将公式上下拖动。
发生的事情的基本解释:在真值表中,每行2 ^ n
数交替 1 或 0,其中n
是给定列距最右边列的列数。
其他答案可能会让布尔感到难过。这个旨在更加布尔。
您需要用's填充第一行 ( 2
)0
D
) - 反转:=NOT(D2)*1
(单元格的公式D3
,复制到D4:D17
)*1
数字化是必要的,以避免看到TRUE
或FALSE
=XOR(AND(D2:$D2),C2)*1
(单元格的公式C3
,复制到所有单元格A3:C17
)$D
LSB 列,也是上一排。因此$D
LSB 列的锚点允许复制到任何其他列*1
用于计算结果TRUE/FALSE
这是 Microsoft 365 单行代码:
=TRANSPOSE(LET(n,5,m,2^n,x,SEQUENCE(n,m,0),y,FLOOR(x/m,1),z,FLOOR((x-y*m)/2^(n-1-y),1),MOD(z,2)))
n
是需要的列数,m
然后存储每列的长度。
该公式找到 的行x
并将值存储在 中y
,然后依次将每一行减半为正确的格式,并输出结果mod 2
以生成输入真值表集。
TRANSPOSE
之所以使用,是因为SEQUENCE
将数字从左到右、从上到下放置。
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
.....
记住数字只有 0 或 1。
DD2=1-D1
列:CC2=IF(D1=1,1-D1,D1)
列:B 列:B2=IF((C1=1)*(D1=1),1-B1, B1)
.....
完成此操作后,为您的真值表复制没有公式的数字以避免 Excel 计算。