我想以表格形式定义一个布尔函数(带有n个输入和m个输出).我想找到一个实现该函数的最佳布尔表达式.这里的最优意味着,在硬件中实现它将需要尽可能少的门(可能每个门具有不同的成本)
我确信VHDL/Verilog合成器经常进行这种优化,我基本上也是出于同样的原因需要它.有某种卡诺求解器吗?或者,是否可以将问题指定为经典优化问题(SAT,整数编程)?我想用Python实现它,所以我主要是寻找一个已经完成这个的包.
如果我在C#中有一个变量需要检查以确定它是否等于一组变量之一,那么最好的方法是什么?
我不是在寻找将该集存储在数组中的解决方案.我更好奇的是看是否有一种解决方案以某种方式使用布尔逻辑来得到答案.
我知道我可以这样做:
int baseCase = 5;
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5;
Run Code Online (Sandbox Code Playgroud)
我很想知道我是否可以做更像这样的事情:
int baseCase = 5;
bool testResult = baseCase == (3 | 7 | 12 | 5);
Run Code Online (Sandbox Code Playgroud)
显然上面的内容不起作用,但是我有兴趣看看是否有比我的第一个例子更简洁的东西,它必须为每个测试值一遍又一遍地重复相同的变量.
更新:
我决定接受CoreyN的答案,因为它似乎是最简单的方法.我认为这很实用,对于新手来说仍然很简单.
不幸的是,在我工作的地方,我们的系统使用的是.NET 2.0框架,并且很快就无法升级.有没有其他解决方案不依赖.NET 3.5框架,除了我能想到的最明显的解决方案:
new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);
Run Code Online (Sandbox Code Playgroud) 我需要创建一个用于创建逻辑电路和查看结果的应用程序.这主要用于A-Level(英国,一般为16-18岁)计算机课程.
我从来没有做过这样的任何应用程序,所以我不确定存储电路和评估结果的最佳设计(以可重复的速度,比如1.6Ghz单核计算机上的100Hz).
我希望允许这些门用于制作"芯片",然后可以在其他电路中使用(例如,你可能想要制作一个8位),而不是从基本门(和,或者nand等)构建电路.寄存器芯片,或16位加法器).
问题是这些电路的门数大量增加,这样如果模拟工作在每个单独的门上,它将有1000个门进行模拟,所以我需要简化这些可以放在电路中的元件,这样它们就可以了快速模拟.
我考虑为每个组件生成一个真值表,然后模拟可以使用查找表来查找给定输入的输出.虽然这些表的大小随着输入而大量增加,但问题出现了.如果芯片有32个输入,那么真值表需要2 ^ 32行.这在很多情况下使用大量内存比使用更多,因此对于非平凡组件不实用,它也不能用于存储其状态的芯片(例如寄存器),因为它们不能简单地表示为简单投入和产出表.
我知道我可以硬编码注册芯片之类的东西,但是因为这是出于教育目的,我想要它,以便人们可以制作自己的组件,以及查看和编辑标准的实现.我考虑过允许使用代码(例如dll或脚本语言)创建和编辑这些组件,以便例如加法器可以表示为"output = inputA + inputB",但是假设学生已经完成了足够的编程.给定语言能够理解和编写这样的插件来模仿他们的电路结果,这可能不是这样的...
是否有其他方法可以采用布尔逻辑电路并自动简化它,以便模拟可以快速确定组件的输出?
至于存储组件,我正在考虑存储某种树结构,这样一旦评估了链接到其输入的所有组件,就会评估每个组件.
例如,考虑:AB + C模拟器首先评估AND门,然后使用AND门和C的输出来评估OR门.
然而,我刚刚想到,如果输出链接回输入,将导致死锁,因为输入将永远不会被评估...我如何克服这个问题,因为程序只能评估一个门时间?
如何读取P意味着经典逻辑中的Q?
例如:
Distributivity:
Ka(X->Y) -> (KaX -> KaY)
Run Code Online (Sandbox Code Playgroud)
这是使用经典逻辑规则的模态逻辑.
KaX:知道X是真的.
我很好奇如何阅读英文含义?如果那么呢?
编辑:在模态逻辑中,Ka变为Box,它是盒装形状标志,象征着必要性规则,规则N,意味着,盒子P,如果你在世界三角洲有P,那么所有难以接受的世界也应该有P.
这也是钻石P,这意味着存在一个世界,其中有一个世界可以从钻石P所拥有的世界进入.
logic computer-science boolean-logic implication modal-logic
我有几个bool元素,我正在检查它是否返回我的假.
bool i = false;
switch (idcount)
{
case 1: i = p1(); break;
case 2: i = p1() & p2(); break;
case 3: i = p1() & p2() & p3(); break;
case 4: i = p1() & p2() & p3() & p4(); break;
case 5: i = p1() & p2() & p3() & p4() & p5(); break;
case 6: i = p1() & p2() & p3() & p4() & p5() & p6(); break;
case 7: i = p1() & …
Run Code Online (Sandbox Code Playgroud) 我有许多变量(7或更多)的真值表,我使用工具(例如逻辑星期五1)来简化逻辑公式.我可以手工完成,但这太容易出错了.这些公式然后转换为编译器内在函数(例如_mm_xor_epi32),它工作正常.
问题:使用vpternlog我可以进行三元逻辑运算.但我不知道一种方法来简化我的真值表到vpternlog指令序列(有些)有效.
我不是在问是否有人知道一个简化为任意三元逻辑运算的工具,虽然这很好,但我正在寻找一种方法来进行这种简化.
编辑:我问了一个关于电气工程的类似问题.
val exp = "( 0 == 1 && 10 > 11 ) || ( 10 < 9 ) && ( 10 == 10)"
val result: Boolean = evaluate(exp) //result = true/false
Run Code Online (Sandbox Code Playgroud)
如何在 Android (Kotlin) 中编写一个简单的程序来评估上述字符串并获得布尔结果?我不想使用像 那样的完整评估器JEL or JEval, Js Eval or any other library
,因为它们对于这个特定要求来说太大了。
Preconditions :
Operators supported : < > == && ||
Works only on digits
Run Code Online (Sandbox Code Playgroud)
也不想用 ScriptEngineManager()
注意:javax.script 包在 Android 上不可用。
evaluation boolean-logic expression boolean-expression kotlin
我在玩布尔值,最后得到了这行代码:
std::cout << true && false;
由于某种原因,它产生1
. 这怎么可能,如果&&
要求双方都为真,才能产生1
?
c++ boolean-logic boolean operator-precedence logical-operators
boolean-logic ×10
logic ×4
boolean ×2
c# ×2
asp.net ×1
avx512 ×1
c++ ×1
evaluation ×1
expression ×1
hardware ×1
implication ×1
intrinsics ×1
kotlin ×1
modal-logic ×1
optimization ×1
python ×1
ruby ×1
truthtable ×1
vb6 ×1