在 excel 中生成一个真理 table
Generate a truth table in excel
我需要制作一个公式,为您提供可变列数的真相 table。
例子
将 FirstCell 替换为对包含第一个 2^1 值的单元格的静态引用,例如$D$1 用于 4 位 table(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 功率电流列(* -1 因为第一个值在最后一列,+ 1 因为它从 0 开始)大于或等于 2 功率电流列的一半,将值为 1,否则将值为 0。
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
.....
记住数字只有 0 或 1。
对于 D 列:D2=1-D1
对于 C 列:C2=IF(D1=1,1-D1,D1)
对于 B 列:B2=IF((C1=1)*(D1=1),1-B1, B1)
.....
完成后,复制没有公式的数字作为你的真相table以避免Excel计算。
当前推荐的答案不适合我。对于更简单的方法,我推荐以下公式:
=IF(MOD(FLOOR((ROW()-ROW(TopRight))/(2^(COLUMN(TopRight)-COLUMN())), 1),2)=0,0,1)
其中 TopRight
是真相的右上角单元格 table。
例如,如果您要创建一个真值 table,其中有 8 个条目从 A3
开始,请将 TopRight
替换为 $H
,然后将公式拖过和向下。
对正在发生的事情的基本解释:实际上 tables,每行 2 ^ n
行交替 1 或 0,其中 n
是列数给定的列远离最右边的列。
其他答案可能会让布尔伤心。这个旨在更布尔。
您需要用 0
的
填充第一行 (2
)
对于 LSB 列 (D
) - 反转:
=NOT(D2)*1
(单元格 D3
的公式,复制到 D4:D17
)
- 这将反转上面一行中的值。
*1
数值化是必要的,以避免看到 TRUE
或 FALSE
对于所有其他列 - 添加:
=XOR(AND(D2:$D2),C2)*1
(单元格 C3
的公式,已复制到所有单元格 A3:C17
)
- 对于 ADD 函数,您想对列中上方的值与其右侧所有列中的所有位进行与操作的结果进行异或。 (换句话说:如果上一位右边的所有位都是1,那么你应该翻转上一位的值。这个ADD公式适用于任意数量的列。 )
- AND 范围参考上一行和右一列,参考
$D
LSB 列,也是上一行。因此 LSB 列的 $D
锚点允许复制到任何其他列
- 同样,
*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
,产生真相 table 组输入。
使用 TRANSPOSE
是因为 SEQUENCE
将数字从左到右、从上到下放置。
我需要制作一个公式,为您提供可变列数的真相 table。
例子
将 FirstCell 替换为对包含第一个 2^1 值的单元格的静态引用,例如$D$1 用于 4 位 table(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 功率电流列(* -1 因为第一个值在最后一列,+ 1 因为它从 0 开始)大于或等于 2 功率电流列的一半,将值为 1,否则将值为 0。
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
.....
记住数字只有 0 或 1。
对于 D 列:D2=1-D1
对于 C 列:C2=IF(D1=1,1-D1,D1)
对于 B 列:B2=IF((C1=1)*(D1=1),1-B1, B1)
.....
完成后,复制没有公式的数字作为你的真相table以避免Excel计算。
当前推荐的答案不适合我。对于更简单的方法,我推荐以下公式:
=IF(MOD(FLOOR((ROW()-ROW(TopRight))/(2^(COLUMN(TopRight)-COLUMN())), 1),2)=0,0,1)
其中 TopRight
是真相的右上角单元格 table。
例如,如果您要创建一个真值 table,其中有 8 个条目从 A3
开始,请将 TopRight
替换为 $H
,然后将公式拖过和向下。
对正在发生的事情的基本解释:实际上 tables,每行 2 ^ n
行交替 1 或 0,其中 n
是列数给定的列远离最右边的列。
其他答案可能会让布尔伤心。这个旨在更布尔。
您需要用 0
的
2
)
对于 LSB 列 (D
) - 反转:
=NOT(D2)*1
(单元格D3
的公式,复制到D4:D17
)- 这将反转上面一行中的值。
*1
数值化是必要的,以避免看到TRUE
或FALSE
对于所有其他列 - 添加:
=XOR(AND(D2:$D2),C2)*1
(单元格C3
的公式,已复制到所有单元格A3:C17
)- 对于 ADD 函数,您想对列中上方的值与其右侧所有列中的所有位进行与操作的结果进行异或。 (换句话说:如果上一位右边的所有位都是1,那么你应该翻转上一位的值。这个ADD公式适用于任意数量的列。 )
- AND 范围参考上一行和右一列,参考
$D
LSB 列,也是上一行。因此 LSB 列的$D
锚点允许复制到任何其他列 - 同样,
*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
,产生真相 table 组输入。
TRANSPOSE
是因为 SEQUENCE
将数字从左到右、从上到下放置。