问题标签 [boolean-logic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
boolean-logic - 创建逻辑门模拟器
我需要创建一个应用程序来创建逻辑电路并查看结果。这主要用于 A-Level(英国,一般为 16-18 岁)计算机课程。
我从来没有做过这样的应用程序,所以不确定存储电路和评估结果的最佳设计(以可恢复的速度,比如 1.6Ghz 单核计算机上的 100Hz)。
而不是从基本门(和,或,nand等)构建电路,我想让这些门用于制造“芯片”,然后可以在其他电路中使用(例如,您可能想要制作一个8位寄存器芯片,或 16 位加法器)。
问题是这些电路的门数量大量增加,因此如果模拟在每个单独的门上工作,它将有 1000 个门要模拟,所以我需要简化这些可以放置在电路中的组件,以便它们可以被快速模拟。
我考虑为每个组件生成一个真值表,然后模拟可以使用查找表来查找给定输入的输出。尽管这样的表格的大小随着输入的增加而大幅增加,但我遇到了这个问题。如果一个芯片有 32 个输入,那么真值表需要 2^32 行。在许多情况下,这使用了大量的内存,因此对于非平凡的组件来说是不实用的,它也不适用于可以存储其状态的芯片(例如寄存器),因为它们不能简单地表示为输入和输出表。
我知道我可以硬编码诸如寄存器芯片之类的东西,但是由于这是出于教育目的,我想要它,以便人们可以制作自己的组件以及查看和编辑标准组件的实现。我考虑允许使用代码(例如 dll 或脚本语言)创建和编辑此类组件,例如,加法器可以表示为“输出 = 输入 A + 输入 B”,但是假设学生已经完成了足够的编程给定的语言能够理解和编写这样的插件来模仿他们电路的结果,这很可能并非如此......
是否有其他方法可以采用布尔逻辑电路并自动简化它,以便模拟可以快速确定组件的输出?
至于存储组件,我正在考虑存储某种树结构,以便在评估链接到其输入的所有组件后评估每个组件。
例如考虑: AB + C 模拟器将首先评估与门,然后使用与门和 C 的输出评估或门。
但是我突然想到,在输出链接回输入的情况下,将导致死锁,因为输入永远不会全部被评估......我该如何克服这个问题,因为程序只能评估一个门时间?
c# - 在 C# 中应用 DeMorgan 定理来手动优化条件语句中的布尔表达式(例如 if 条件)是否有用
回到我在 C 和 C++ 中完成大部分工作的那一天,当然,我会手动应用德摩根定理来优化任何重要的布尔表达式。
在 C# 中执行此操作是否有用,或者优化器是否不需要这样做?
c# - 为什么我不能对字节进行布尔逻辑?
在 C# (3.5) 中,我尝试以下操作:
我得到错误 132:“无法将类型 'int' 隐式转换为 'byte'。存在显式转换(您是否缺少强制转换?)”。| 也会发生同样的情况 和^。
我究竟做错了什么?为什么它问我整数?为什么我不能对字节进行布尔逻辑?
sql - sql 查询 - true => true, false => true or false
简单的查询,可能不可能,但我知道那里有一些聪明的人 :)
给定一个布尔参数,我希望定义我的 where 子句来限制某个列的输出 - 或者什么都不做。
因此,给定参数 @bit = 1 这将是结果:
其中列 = 1
给定参数 @bit = 0 这将是结果:
其中列 = 1 或 0
即没有效果/显示所有结果(列是位字段)
我不想要动态 sql - 我可以解决在代码中解决这个问题,但我只是想知道是否有一些聪明的魔法可以使上述内容变得整洁和简单。
在那儿?我正在使用 sql 服务器。
欢呼:D
php - PHP 逻辑 - 三个中的一个或两个返回 False 未设置
我有一个收集信息的表格,其中一个是电话号码。电话号码数据来自三个字段,一个是区号,一个是前 3 位数字,一个是后四位数字,因此号码的格式为:xxx-xxx-xxxx(美国基本格式)。
这三个字段不是必需的,但如果有人决定填写这三个字段的任意组合,我想做一些基本的错误检查:
(假设他们只给我区号 - 这意味着他们想给我他们的号码,所以从本质上讲,它成为必需的,所以代码应该检查以查看 1)所有三个数据集都已发送,以及 2)这三个都只是数字)
这是我认为可行的方法,但它没有:
有什么建议么?
algorithm - 优化特定指令集的合取范式表达式的算法?
我正在使用Espresso 逻辑最小化器来生成一组布尔方程的最小化形式。然而,我希望在标准微处理器上实现这些,而不是为可编程阵列逻辑(这是 Espresso 通常用于)生成逻辑。问题是 Espresso 以合取范式产生输出,这对于 PAL 来说是完美的,但对于 x86 或 PPC 来说不是最佳的。
例如,Espresso 完全忽略 XOR - 在下面的 Espresso 输出中,子表达式(!B0&!B1&B2&!B3) | (!B0&!B1&!B2&B3)
等价于(!B0&!B1&(B2^B3))
. 这种替换确实增加了表达式的门深度/关键路径,但考虑到我正在查看具有足够数量的术语以完全饱和周围任何 CPU 的执行资源的表达式,折衷一些门深度来减少似乎是合理的指令总数。我还想扩展它以了解如何使用我感兴趣的某些处理器上可用的 ANDC 或 NOR 等指令。
我正在查看的 CNF 表达式示例:
因此,要使这成为一个实际问题;按优先顺序:
你知道 Espresso 的选项或扩展会产生我想要的那种表达吗?
您是否知道任何理解(或可以教授)各种门类型的布尔逻辑最小化工具,而不仅仅是为 PAL 生成 CNF?
您是否知道将上述 CNF 表达式转换为使用其他类型门的表达式的算法?
如果您不知道它的算法,您是否知道或可以想到任何有用的启发式方法?
(而且,以防万一你要建议它 - 测试表明 GCC 和 ICC(或者,我敢打赌,现有的任何其他 C 编译器)还不够聪明,无法从 CNF 表达式中为我执行特定于处理器的最小化- 这真的很好,但是检查 -O3 -S 的输出表明他们甚至无法捕捉到可以使用 XOR 的情况)。
user-interface - 如何在 Web 表单 GUI 中实现用户友好的布尔逻辑?
目前我有一个 Web 应用程序,用户可以使用下拉列表生成 SQL SELECT 语句,如下所示:
列选择下拉| 运算符下拉菜单 (= != > < <= >=) | 值选择下拉菜单
用户可以多次执行此操作,并且“过滤器”当前都被“与”在一起。
我想添加创建 OR 语句的可能性。在列相同的情况下,我可以很容易地添加 OR,但是复杂的逻辑语句呢?
((A OR B OR C) AND (D OR E)) OR (F AND G)?
如何让用户以用户友好的方式创建此类语句?
编辑:要指定,对普通观众来说是用户友好的。目前,我与偶尔为需要来自我们数据库的特定信息的非技术客户端手动编写 SQL 查询的开发人员合作。目标是这个网络应用程序将通过为客户提供一个易于使用的工具来让我们自己编写代码,从而消除我们对它们进行手动编码的需要。
EDIT2:目前最终用户没有使用该应用程序。关于它的使用,我拥有的唯一数据是以前的手写 SQL 查询,因此是客户要求的那种查询。鉴于我可以简化它(例如,将用户生成查询的能力限制为他们倾向于要求的查询类型),但我想看看是否有人有在 GUI 中简单而完整地交流布尔逻辑的经验。
感谢您的时间。