EEJournal

专题文章
现在就订阅

古人的奥秘:二进制编码的十进制(BCD)

我爱过去的学习逻辑设计师解决了棘手的问题与创新的解决方案。我越是深入研究这类东西,我对自己说,“哇!我永远也不会想到!“一个很好的例子是二进制编码的十进制(BCD),因为还有很多比人们可能这一主题,首先,假设。

实际上,我可以大胆的说,即使你是一个数字逻辑大师拥有更快条纹两边的大脑尺寸16,如果不学习新东西在本专栏中我的名字不是最大的辉煌!

说话的逻辑,在我们潜水地一头扎进BCD争论兴致勃勃地和放弃(当然和沉着,),让我们时刻提醒自己,我最喜欢的一个逻辑难题。

我们先从一个黑盒,有三个输入,a, B和C,还有三个输出背板,NotB, NotC。三个输出相应的逻辑反演输入(= 0时,背板是1;当一个是1,背板是0;当B = 0, NotB是1…等等)。

我们的任务是指定黑盒的内容。如果我们允许使用任何逻辑门我们所期望的,那么我们只需要三个不是盖茨来做这项工作。悲伤的联系,有一个问题在我们通知我们只有两个不是盖茨在我们处理。在你问之前,我们不允许使用任何与非,而且,XOR或XNOR门。光明的一面,我们可以使用尽可能多的和或门我们的心的愿望。

如果你还没有接触到这个小流氓,那就值得你花时间思考这个难题。尽管似乎不可能,真的是一个没有诡计逻辑的解决方案,最后提出了本专栏的愉快和喜悦。

设置场景

正如我所提到的在前面的文章(Arduino 0和1,低和高,虚假和真实的,和其他的东西),我现在在写一系列的过程Arduino训练营实用的电子产品(体育),这是英国首屈一指的电子和计算机爱好者杂志。

不幸的是,光荣多美的编辑,邪恶的著名的马特•Pulzer希望我关注细节实践的东西。马特是激烈的战斗我流浪的杂草是我的习惯,既然我不能涵盖一切体育的打印页面,这样的文章写辅助捕获和分享很多超有趣的上下文(看看我的材料无焊料的案板的博客,例如)。

在我早期的列Arduino训练营系列描述多种方式采用7-segment显示器,包括多个BCD的表现。作为的一部分,我创造我认为一些super-spiffy图,其中一个例子如下所示。

盛宴你的魔法球在我的棒图(资料来源:Max Maxfield)

跳线的原因在中间的力量和地面rails擀面板的顶部和底部的讨论提到的博客

那是什么?我听到你低声说着“我打赌这些图像创建使用吗弗里茨软件“在你的呼吸吗?这样的话,你会失去你的钱因为我创建所有图使用Microsoft Visio。像许多工程师,我有一个提示嗅气味的强迫性。因此,这些年来,我花了无数小时手工制作手工图快乐家族。

有多少个手指?

当我们在我们的讨论0和1列,今天绝大多数的基础是数字计算机二进制(以2为底)系统,它只支持两个值:0和1。

使用二进制的原因是它相对容易产生电子之类的简单逻辑功能的实现,与非,或者,也没有XOR, XNOR可以检测区别两种不同电压的输入,产生的电压输出。

而不是讨论特定的电压值,我们抽象的他们,称他们为0和1。除了考虑这些值0和1是二进制数字,我们也可以使用它们来表示逻辑的概念真正的

一个二进制数字称为。我们可以一起收集组位代表几乎任何我们想要的,包括数值的整数或浮点数,字母数字字符和标点符号,…的例子不胜枚举。两个很常用的分组4比特nybbles(或轻咬)和8位字节

不幸的是,人类很难考虑二进制数字。由于我们有十个手指(包括拇指),我们是最熟悉的数字系统小数一个省,十进制的(八进制数数)雇佣了十位数:0,1,2,3,4,5,6,7,8,9。由于各种原因,包括广泛使用,我们倾向于使用发现十进制直观,容易理解。举个例子,如果你发现自己在一个废弃的大厦在一个月黑风高的夜晚,和你听到可怕的声音来自一个房间与二进制数001010011010门上涂上(什么是人们只能希望)滴红色油漆,你可能没有相同的本能反应,如果相同的值给出了十进制666(我担心我看过的恐怖片比有利于我)。

另外,这个词四足动物的指的是一种动物,有四个肢体,臀部和肩膀和手指和脚趾。超类四足动物总纲包括人类和hippopotami、两栖动物和土豚、青蛙和鳄鱼,蜥形类、合弓纲…再一次的例子不胜枚举。最原始的四足动物Acanthostega发现到目前为止,在泥盆纪末(法门阶时代)约3.65亿年前。我提到这个的原因是Acanthostega有八个发育完全在每只手的手指。

第一个四足动物,Acanthostega,有八个发育完全的手指在每一方面
(来源:马克斯Maxfield和阿尔文·布朗)

如果进化没有轻微的绕道,我们可能会最终使用基数16编号系统,本来欢乐的方便(没有双关),当我们终于发明数码电脑,但是我们跑题了…

浸渍的脚趾BCD水域

总结我们迄今为止:(a)人类喜欢玩十进制表示法和(b)数字计算机二进制的工作时是最幸福的。我们需要的是一些地图(翻译)之间的两个方法。事实上,有无数的映射可能,这类的二进制编码的十进制数字,我们统称为二进制编码的十进制(BCD)。

因为四位可以代表24= 2 x 2 x 2 x 2 = 16 0和1的不同组合,只需要四位编码我们十十进制值。

最直观和明显的BCD是基于使用自然二进制数方案(“自然”,因为它遵循通用的计算方法采用十进制和其他地方值编号系统)。在这种情况下,大多数人通常认为这是针对BCD,但应该更恰当的被称为自然BCD (NBCD)或简单的BCD (SBCD),每个数字都有一个与之相关联的重量。当我们在我们的讨论0和1列,这些权重是23,22,21,20相当于8 4 2和1,所以这种方法也被称为“8421编码”或“BCD 8421。”

BCD 8421(来源:马克斯Maxfield)

观察到有六个未使用的二进制组合在4比特nybble用来存储BCD数字。BCD的8421年,这些未使用的组合是1010,1011,1100,1101,1110,1111。

虽然这并不是我所遇到自己在现实世界中,nybble控股可能称为BCD值tetrade(从“一群或一组四”),在这种情况下,十个州代表BCD数字可能被称为四分体四联球菌

打包和解包

大多数计算机处理数据的形式8位字节。甚至在机器与16位,32位,64位数据路径,我们倾向于认为这些路径是2,4,宽8个字节,分别。

轴承这一点,有可能8421 BCD编码值两种方式中的一种:打开包装。在打开的情况下BCD,每个BCD数字编码为四个最低比特位(lsb)(字节0到3)的一个8位字节,而这四个最重要的比特(位元)(4 - 7位)的字节没有意义(它们通常含有0)。在这种情况下,编码的十进制值95将如下所示。

存储一个十进制值95 8421打开BCD(来源:Max Maxfield)

相比之下,在是BCD的情况下,两个BCD位数编码为一个字节,和一位在最低位nybble (LSN)(字节0到3),另一位最重要的nybble (MSN)(位4 - 7)。在这种情况下,假设大端法格式,编码的十进制值95将如下所示。

一个十进制值95 8421是BCD存储(来源:Max Maxfield)

转移和屏蔽操作可以使用用于包装或解压缩BCD位数(参见我的专栏屏蔽和C / c++逐位运算符)。

输入和输出

“这些都是非常有趣的,但BCD今天仍然使用吗?“我听说你哭泣。你可以打赌你的小棉袜子啊!稍后我们将详细讨论这正如一个诱人的taster-one常见应用程序允许人类容易指定十进制值使用BCD拨轮开关,等302109000ck(现在Littelfuse的一部分)。

302109000 BCD拨轮开关(来源:ck)

在这种情况下,运营商旋转拨轮在前面,和相应的BCD码提出了四个终端在后方。通常使用在工业控制应用中,这些开关组可以安装在一起,从而允许用户指定较大的数值。

另一个常见的应用程序现在7-segment显示十进制值。在个位数共阴极7-segment显示,例如,我们可以使用CD4511 BCD-to-7-segment解码器从德州仪器。的简化表示CD4511的真值表所示。

CD4511 BCD-to-7-segment译码器真值表(来源:Max Maxfield)

我们之所以说这是一个简化版的真值表是CD4511也有灯测试(LT),消隐(提单),和门闩使(LE)输入,可以用来测试显示,关闭或调节其强度,分别和插销/ BCD存储代码。

无符号、Sign-Magnitude和二进制数字签名

稍后,我们将看看不同的方式代表了大量由BCD位数。在我们这么做之前,然而,它可能是一个好主意来快速刷新我们的头脑是如何在二进制我们做事。

为简单起见,我们使用4比特二进制值。正如我们所知,四位可以代表24= 2 x 2 x 2 x 2 = 16 0和1的不同组合。如果我们决定使用这些组合仅代表积极的值(我们称之为无符号二进制),那么我们可以表示十进制值0到15。这是显示如下图中(a)。

无符号的比较、sign-magnitude和签署4比特二进制数(来源:Max Maxfield)

如果我们希望代表正面和负面的数字,然后有两种常用的方法。第一,使用相对罕见,被称为sign-magnitude二进制。这是显示为(b)在上面的图中。在这种情况下,最重要的一点(MSB),这被称为符号位,是用来表示积极的和消极的价值观(0 =阳性,1 = -)。剩下的部分,哪些列权重相同,用来表示数量的大小。使用这个方案,我们可以从7 + 7代表值。虽然这种方法是直观的和平衡的(它提供相同数量的积极的和消极的值),这有点“笨重”使用,尤其是最后两个口味的零(+ 0,0)。

表示积极和消极的一个更常见的方法是使用一个值签署了二进制格式(或称。二进制补码格式,我们将在本文后面讨论)。这是显示为(c)在上面的图中。在这种情况下,最高有效位代表一个负的数量基于列的重量。关于签署4比特二进制数,在MSB代表0 0,1在MSB代表8,其余部分继续代表积极的价值观。因此,我们现在可以使用4比特字段代表的数量从8 + 7。签署了二进制格式不太直观的包装我们的大脑,正如我们将看到它使我们的生活,在实践中容易得多。

手工添加二进制数

这不是我的目的教二进制算术这里无数的可用资源在互联网上对这类,但我通常在事情从一个稍微不同的方向,我有一些想法诺我的心灵,我想分享。

例如,如果我们希望添加两个小数位数,有100种不同的可能性:0 + 0 = 0,0 + 1 = 1 + 2 = 2…1 + 0 = 1,1 + 1 = 2,1 + 2 = 3…2 + 0 = 2,2 + 1 = 3,2 + 2 = 4…等等。如果操作的结果小于或等于9,然后没有外卖的食物下一阶段。另外,如果结果是10至18岁,有一个便携的1到下一阶段。

相比之下,如果我们希望添加两个二进制数字在一起,只有四个不同的可能性:0 + 0 = 0,0 + 1 = 1,1 + 0 = 1,1 + 1 = 10(十进制或2)。我们通常认为后一种情况是:“1 + 1 = 0 + 1到下一阶段的外卖的食物。”

当然,如果我们有一个入库前一个阶段,现在给了我们额外的可能性1 + 1 + 1 = 11(十进制或3)。我们通常认为后一种情况是:“1 + 1 + 1 = 1 + 1到下一阶段的外卖的食物。”

在任何数字系统,最坏的情况就是我们从每一个阶段有一个外卖的食物。假设我们正在与四位值,考虑到例子所示:

携带的例子在十进制和二进制加法(来源:Max Maxfield)

携带的例子,因为我们有说,我们正在与四位值,假设我们没有办法存储任何额外的数字,所以我们只是丢弃任何外卖的食物进入第五纵队。

值得一提,那就是一会儿对比和比较9998年和1110年的结果(b)和(d),因为这给了提示的“引擎盖下”。

现在,事情开始变得有趣了。假设我们正在与无符号二进制数,我们决定增加0011 + 1001(十进制或3 + 9)。结果是1100(十进制或12)所示如下(a)在图像。

添加无符号和手工签署了二进制数(来源:Max Maxfield)

或者,假设我们正在与签署了二进制数,我们决定增加0011 + 1001(十进制或3 + (7))。在这种情况下,结果是1100(十进制或4)(b)所示上图。

等等!什么?的值为这两种情况下是相同的!这就是我们开始欣赏签署的狡猾的二进制格式。不管我们是否考虑签署或无符号的值,因为我们添加积极的和消极的价值观以完全相同的方式。我们很快就会看到,这大大简化了执行的任务除了使用逻辑门。

唯一的“规则”是哪个格式我们考虑我们的价值观(无符号或签署),为了使结果是有效的,它必须能够适应任何大小字段我们使用。在我们4比特值的情况下,这意味着结果必须在0到15如果我们考虑作为无符号值,或者必须在8 + 7如果我们正在考虑的价值观是签署。

添加二进制数字与逻辑门

因为我们涉及很多主题在本专栏中,值得注意的是数量,另一个号码是添加叫做被加数从拉丁语augendum,意思是“一个被增加。”相比之下,这一数字添加到另一个叫做数量加数从拉丁语addere,意思是“添加”,添加两个或两个以上的数字加起来的结果被称为总和从拉丁语总结女性的summus,意为“最高”。

我们开始通过定义一个比特二进制加法器。符号和真值表如下所示,一个是我们出的被加数,B是我们1比特加数,Cin(“携带”)是比特携带来自前一个阶段,比特和年代,Cout(“执行”)是比特携带进入下一阶段(你会明白我的意思,“前一个阶段”和“下一阶段”)。还有这种事出的二进制一半加法器,只有a和B的输入(Cin),但我们不会使用,小流氓。

定义出完整的二进位加法器(来源:Max Maxfield)

说句题外话,对事实表,有些人喜欢在左边输入列Cin的A和B两个右手输入列。。影片完全没有异议尽管这可能让你暂停片刻的思想,你需要做的就是交换,B, Cin标签顶部的列和离开一切“按原样”。

很容易想出一个集合的逻辑门实现这个真值表。如下文所述,一个常见的实现涉及到单个2-input或门,两个2-input和盖茨,和两个XOR门(总是2-input)。(如果你有兴趣深入研究这个话题,只执行一个谷歌搜索“1比特加法器。”)

一个可能的门电路级满出的二进制加法器的实现
(来源:Max Maxfield)

匹配计算我们一直执行,我们的下一步是连接四个实例化的比特加法器来创建一个4比特版本如下图所示。

建立一个4比特二进制加法器(来源:Max Maxfield)

的象征,与他们相关联的角度的线与4号表明这是4比特(四线)公交车。

观察到我们强迫Cin输入喂养对齐到最低有效位(LSB)为0,因为没有早期驾驶这一点(我们可以使用half-adder这个阶段,但我们需要稍后Cin输入)。Cout LSB的驱动器Cin到下一个,等等。为了我们的讨论,我们可以假设我们丢弃(没有注意)Cout最重要的一点(MSB)。在现实世界中,我们将使用这个“套利”信号(以及另一个名为“溢出”)的信号告诉我们如果结果从我们的大小增加超出了我们的能力来表示它的部分在我们的处理,但这是另一个故事了。

很明显,这个实现称为脉动进位加法器因为有涟漪。这是最慢的加法器,但是它需要最少的逻辑门,最简单的理解,这使得它适合我们这里谈论的。

减去二进制数字与逻辑门(不要这样做!)

另一个号码的数量减去叫做被减数从拉丁语minuendum,意为“被削弱。“相比之下,这一数字是减去从另一个叫做数量减数从拉丁语subtrahendum,意为“减去。”得到的结果从另一个叫做减去一个数剩余部分或者是区别

基于我们到目前为止所讨论的,如果你无意中通过timeslip下降,发现自己在1940年代早期,你已经拥有的知识需要使用原始逻辑门实现二进制减法。

重要的是要明白,我要告诉你的不是我们执行二进制减法在现实世界中。但是,它是值得看的小娱乐我们可能会做事情的方式,如果我们不知道我要给你稍后在本专栏。

我们的第一步是定义一个比特二进制减法器。符号和真值表如下所示,一个是我们1比特被减数、减数是我们出的,本(“借入”)是比特借来自前一个阶段,D是比特的区别,布特(“借”)是比特借下一阶段。

定义一个比特满二叉减法器(来源:Max Maxfield)

现在你知道该怎么做了。如果我们要追求这种方法(我们没有),我们会想出一个集合的逻辑门实现这个真值表,然后我们将使用四个实例化出的减法器来创建一个4比特版本。你只能相信我,像我们4比特adder-this减法器将愉快地与两个无符号,并签署了二进制值。

我们不想花太多的时间,所以让我们跳到考虑如何实现4比特加法器和4比特减法器在一起,也许是一个中央处理单元(CPU)的一部分。

实现4比特二进制加法和减法(来源:Max Maxfield)

这里的想法是,我们喂4比特(握)和B(握)信号到加法器和减法器,和我们使用4比特2:1多路复用器来选择操作的输出我们目前感兴趣的和使用这些结果我们4比特R(握)。

再一次,这些讨论的目的,我们假定我们丢弃Cout信号的最高有效位加法器和减法器的MSB的波信号。

假设我们说我们加法器消耗一个逻辑门(这些讨论的目的,我们不关心实际的数字)。还假设我们减法器消耗相同数量的盖茨加法器。我们也会说我们的多路复用器消耗M逻辑门。这意味着我们对该实现的总门数是2 + m .此外,如果我们故意含糊不清的,我们可以说这个实现包括两个阶段,从其主要输入其主要输出延迟。我们做的这些事实为未来的讨论。

这种解决方案的问题是,我们现在有两个相对复杂functions-our加法器和subtractor-consuming资源(逻辑门和房地产在硅片),不断燃烧的力量,虽然我们只使用其中一个函数在任何特定时间。如果有一个更好的方法…

基数和减少基数补充

进一步在我们继续进行之前,这是一个很好的时间去注意,有两种形式的补充与每个数字系统有关补码减少补码定下的基数指的基础系统。

根据十进制(八进制数数)系统,也被称为补码十的补和减少补码是众所周知的九的补。对于二进制(以2为底)系统,也被称为补码二进制补码和减少补码是众所周知的一个人的补充

在这个地区有很多的困惑。例如,应该写十,十或十的补充?问题是,您可以运行在所有这些变体。许多风格手册建议完全离开了撇号。然而,许多从业者喜欢写这些撇号十补充形式,九的补,二进制补码,和一个人的补充,这种方法我们将使用前进。

如果我们使用RC和刚果民主共和国代表补码,减少补码,分别,然后RC =刚果(金)+ 1(相反,刚果民主共和国= RC - 1)。你会来欣赏这方面的事情。

说句题外话,在我们继续进行之前,你有没有想过,' = '字符的起源吗?这个角色的发明之前,通常是由一个字表示,如平等aequalesaequantur这个词来自拉丁语aequlis,意思是“甚至”或“水平”(例如,一个数学家写“6 + 2 aequales 8”)。第一次使用现代平等的象征出现在公元1557年的书威特的磨刀石罗伯特,这是由英国数学家雷科德(1510 - 1558)。多美,雷科德指出:“我会sette能源部经常woorke使用,parralles成对的话,或Gemowe行lengthe之一,因此‘=’bicause noe 2, thynges,可以moare equalle。”

减去二进制数

当我们从另一个减去一个数,它可以是复杂的包装我们的大脑在借贷的概念。这是真的,甚至当我们在小数,不仅仅是因为有不同的执行贷款操作方式(见我的博客借款人和贷款人)。

可能是学习如何执行借操作以二进制同样反对者。我不能说,因为我从来没有义务这样做。相反,我使用一个和两个执行这些操作的补充。

假设我们希望执行十进制计算5 - 2 = 3。嗯,这很容易,不是吗?在二元怎么样?假设我们仍然使用4比特值,这将是0101 - 0010 = 0011。像大多数事情一样,这看起来很容易,如果你说话很快,疯狂地做手势,但我是怎么做到这一点呢?说实话,我只是看着原来的小数计算,然后因为我知道他们的心的十进制值代替二进制等价物,从而粉饰我们将如何执行计算。说到这里,考虑下面的例子。

谁知道如何在二进制执行借呢?(来源:Max Maxfield)

我们从LSB,包括操作1 - 0 = 1。第二点要求我们执行操作0 - 1,这将涉及借贷。我确信这是容易学习和做的正如我刚才回答实际上从来没有义务这样做,因为还有其他的方法来实现所需的结果。

让我们回到我们最初的5 - 2 = 3计算小数。另一种方式来查看这是5 + (2)= 3。你可能会觉得这并没有大幅改善我们的立场我进一步解释。我们知道,在二进制是0010 + 2。我们要做的是创建二进制相当于2,,如果我们看看签署二进制表,我们知道是1110。我们获得2以二进制的方式是生成二进制的二进制补码+ 2。有三种方式,我们可以这样做。

第一种方法,我们可以称之为“减去,添加如下(a)所示。这涉及到我们减去0010(+ 2)从1111年(所有的)来生成一个补充1101 (3)。观察,我们从来没有执行借而这样做。接下来,我们增加0001(+ 1)生成二进制补码1110 (2)。

生成一个和两个的补充(来源:Max Maxfield)

第二种方法是我们可以称之为“翻转并添加”(b)所示。在这种情况下,从0010年开始(+ 2),我们只是翻转(转化)的所有比特,0 1 0和1,生成一个补充1101 (3)。像之前一样,我们明年增加0001(+ 1)生成二进制补码1110 (2)。

第三种方法是一个有用的快捷方式见上面(c)。再一次,我们开始与我们的0010(+ 2)值。LSB的次月起,我们(和复制包括)第一个1,然后翻转(逆)剩下的部分,让我们与我们的二进制补码1110 (2)。

这同样适用在逆转。如果我们从1110年开始(2)并生成二进制补码,我们最终会得到0010 (+ 2)。关键是我们可以实现所有这些没有执行贷款操作。此外,如果我们坚持使用(b)和(c)技术,我们甚至不需要执行减法。如果你还没有意识到这一点,我们谈论的是一个真正的“Tra-la”的时刻,因为这将打开大门的各种可能性。

例如,让我们回到我们最初的问题5 - 2(二进制,0101 - 0010年),我们现在可以重新措辞为5 +(2)所示的(二进制0101 + 1110)。

减去两个补充(来源:Max Maxfield)

只需要添加执行最后一步。记住,我们正在处理4比特值,我们丢弃任何携带进入第五纵队,留给我们0011年的预期结果(+ 3)。

我知道,这一切似乎可以“有点”(没有双关),如果你是一个初学者。后一点实践,然而,你甚至不会停下来进行思考而产生两个的补充和使用它们作为你的计算的一部分。

建立一个和两个与逻辑门的补偿器

在前一节中,我们讨论了如何执行二进制减法手工使用的概念和两人补充。下一步是使用逻辑门实现这些功能。因为我们限制自己使用4比特值为简单起见,我们首先创建一个4比特的补偿器。这很容易peasy柠檬捏的,因为它只需要四个不是盖茨(逆变器)如下(a)所示。

建立一个和两个补偿器的逻辑门(来源:Max Maxfield)

从我们之前的讨论,我们知道一个二进制数的二进制补码是其补充+ 1,我们可以使用4比特二进制加法器实现这一如上(b)所示(观察我们连接加法器的Cin输入为0,我们不使用其Cout输出)。

减去二进制数与两个补偿器(不要这样做!)

再次,根据我们讨论到目前为止,你可能会想象一个好的解决方案能够加减两个4比特二进制数将实现看起来像下面这样:

使用两个补偿器实现4比特二进制加法和减法(来源:Max Maxfield)

正如我们看到的,输入(握)总是输入原来的4比特加法器。其他输入原来的加法器是美联储从4比特2:1多路复用器,用于选择B(握)输入之间如果我们希望执行加法(Sel = 0)或两个互补的B(握)输入(我们称为tcB(握))如果我们希望执行减法(Sel = 1)。

让我们回想一下当我们正在考虑使用一个4比特加法器和一个4比特减法器。您可能还记得,我们认为加法器需要盖茨,我们减法器需要相同的,和盖茨4比特2:1多路复用器需要米,总共给2 + M .我们还指出,延迟的解决方案涉及到两个阶段其主要输入其主要输出。

现在考虑我们的最新解决方案。记住,我们两的补偿器由一个补偿器(四个不是盖茨)和一个4比特二进制加法器。这意味着我们的新的解决方案消耗2 + M + 4 *不是盖茨,这意味着它包含更多的盖茨比原来的(悲伤脸)。

更糟糕的是,即使我们排除一个补偿器的基础上,不是盖茨都非常快,最坏的道路为我们新的实现(通过两个补偿器)现在需要三个阶段其主要输入其主要输出的延迟(甚至悲伤的脸)。

所以为什么我们优柔寡断的这一切呢?深吸一口气,准备自己的另一个“Tra-la”的时刻,因为所有即将显示…

减去二进制数与一个补偿器(这是方法!)

直到现在,我们已经联系了Cin原来的4比特加法器的输入为0。让我们想想。效果是什么如果我们要将这个连接到1 ?事实上,这就像添加1到最终结果。

嗯。我们如何生成一个二进制补码的二进制值?天啊,你是对的!我们把1添加到一个人的价值的补充。这意味着我们可以代替两个补偿器的补偿器和使用比特2:1多路复用器喂4比特加法器的Cin输入如下说明。

使用一个补偿器实现4比特二进制加法和减法(来源:Max Maxfield)

相同的选取信号可用于控制多路复用器。如果我们希望执行加法(Sel = 0),我们选择B(握)输入和我们目前的0到加法器的输入Cin。相反,如果我们希望执行减法(Sel = 1),我们选择的补充B(握)输入(我们称之为台籍干部[握3]),我们现在1加法器的Cin输入。

如果我们排除盖茨用来构成了1比特2:1补偿器和多路复用器,我们的新解决方案只能执行加法和减法,而消费+ M逻辑门,只涉及两个阶段其主要输入其主要输出的延迟(幸福的笑脸)

一起:“Tra-laaaaa !”

无符号、Sign-Magnitude和BCD数字签名

我知道,我们漫步在我们的讨论,但是希望你还没忘记,这篇论文的主要话题是二进制编码的十进制(BCD)。问题是迄今为止我们看过的一切都要让你更容易包装我们的大脑的恐怖来的乐趣。

在这篇文章中,我们介绍了BCD 8421每一个十进制数字代码编码使用四个二进制位。让我们假设这是我们正在与代码,除非我告诉你。此外,这些讨论的目的,让我们假设我们正在与四位BCD值。

如果我们决定使用这些数字只代表积极的(无符号)值,然后我们可以表示十进制值0000到9999。这是显示如下图中(a)。

比较,无符号,sign-magnitude,签署了4位BCD数字(来源:Max Maxfield)

您无疑还记得,在我们4比特二进制值的情况下,列权重的最重要的一点(MSB)对齐到最低有效位(LSB) 23,22,21,20等于8,分别为4、2、1。相比之下,我们的4位无符号的BCD值,列权重从最重要的数字(MSD)的数位(LSD) 103,102,101,100,这相当于1000、100、10、分别和1。

如果我们希望使用BCD表示正面和负面的数字,然后有两种常用的方法。第一个叫sign-magnitude BCD。这是显示为(b)在上面的图中。在这种情况下,默沙东公司充当符号位,用于显示积极的和消极的价值观。在这个图中我用0(二进制0000)和1 0001(二进制)表明积极的和消极的价值观,分别。在实践中,它是更普遍使用的两个未使用的二进制代码,通常是1100到1101年,用于显示积极的和消极的价值观,分别。剩下的数字,有相同的列权重和之前一样,是用来表示数量的大小。使用这个方案,我们可以代表值从-999 + 999。至于sign-magnitude二进制,我们得到两个口味的零(+ 0,0),它可以让我们的生活“有趣”。

表示积极的和消极的价值观的另一种方法是使用一个BCD签署格式。这是显示为(c)在上面的图中。在这种情况下,MSD可能代表一个积极或消极的数量的基础上,结合数字本身和列的重量。关于签署4比特BCD数字,0,1,2,3,4中的值并代表0,+ 1000,+ 2000,+ 3000,+ 4000,分别。然而,5,并表示-5000年,6代表-5000 + 1000 = -4000,7代表-5000 + 2000 = -3000,8代表-5000 + 3000 = -2000,9代表-5000 + 4000 = -1000。所有剩余的数字继续代表积极的价值观。因此,我们现在可以使用4位字段代表值从-5000到+ 4999。

手工添加BCD数字

这正是事情变得太酷了,我在我的座位在蠕动兴奋,因为我们可以对无符号执行加法和签署了BCD值几乎以相同的方式我们和无符号二进制数字签名。

考虑添加无符号十进制值2354 + 6430 = 8784,相当于(+ 2354)+(+ 6430)=(+ 8784)小数。这是显示如下(一)插图。

现在考虑添加BCD签署价值2354 + 6430 = 8784,相当于(+ 2354)+(-3570)=(-1216)小数。这是显示为(b)在上面的插图。这意味着,不管我们是否考虑我们的BCD值无符号或签署,我们仍然执行以完全相同的方式添加。

减去BCD数字

减去BCD数字用手很容易,即使它涉及执行贷款操作,因为我们把这些值相同的方式如果我们使用常规的小数,而不管我们正在考虑他们无符号或签署了BCD值。考虑一个简单的例子涉及4354 - 2430 = 1924,相当于(+ 4354)-(+ 2430)=(+ 1924)小数,如下图所示。

在某个阶段,我们将需要决定如何执行减法操作使用逻辑门。binary-centric讨论但是今天早些时候我们可以复制所有的只是承认,我们将使用9和10的补充技术。

让我们回到我们最初的4354 - 2430 = 1924计算。再一次,另一种认为这是4354 + (-2430)= 1924。所以,我们要做的是创造相当于-2430 BCD(即。的十补+ 2430)。基于我们之前的讨论,我们知道这将是7570年的BCD,相当于在十进制-5000 + 2570 = -2430。

有三种方式,我们可以这样做。首先,我们有“减并添加”方法如下(a)所示。这涉及到我们减去2430(+ 2430)9999(9)生成九补7569 (-2431)。接下来,我们增加0001(+ 1)生成十补7570 (-2430)。

生成9和10的补充(来源:Max Maxfield)

另外,我们有“补充和添加”技术(b)所示。在这种情况下,我们只需记住,0是9的补充,1的补充是8,2是7的补充,等等,然后我们记下的补充生成九补7569 (-2431)。和之前一样,然后我们增加0001(+ 1)生成十补7570 (-2430)。

第三种方法是一个有用的快捷方式见上面(c)。再一次,我们开始与我们的2430(+ 2430)值。开始与迷幻药,我们复制(但不包括)第一个非零位。然后减去第一个非零数字10,之后我们补充剩余的数字减去从9日离开我们十补7570 (-2430)。

和之前一样,这反过来同样适用。如果我们从7570年开始(-2430年)和生成它的十补,我们最终会得到2430 (+ 2430)。之前,关键是我们能实现这一切没有执行贷款操作。

好的,让我们看看这个行动回到我们最初的问题4354 - 2430 = 1924如下(a)所示。如果我们改述这4354 +(-2430)= 1924,然后十补充我们BCD计算可以表现为4354 + 7570 = 1924,相当于(+ 4354)+(-2430)=(+ 1924)小数,如下(b)所示。

减去十的补充(来源:Max Maxfield)

再一次,记住的是,我们正在处理的四位值,我们丢弃任何携带进入第五纵队,离开我们预期的结果为1924 (+ 1924)。

创建一个1-Digit BCD 8421加法器

BCD加减数字时使用逻辑门,我们的第一步是创建一个完整1-digit BCD 8421加法器(记住每个BCD数字表示使用四个二进制位)。

象征着充满BCD 1-digit 8421加法器(来源:Max Maxfield)

一个共同的方法来确定哪些我们要使用逻辑门是创建一个函数的真值表,然后执行布尔和/或卡诺图最小化,所以我为什么不包括一个真值表在上面的图吗?

记住,如果我们想要添加两个BCD数字在一起,有100个不同的可能性,0 + 0 = 0,0 + 1 = 1,0 + 2 = 2…1 + 0 = 1,1 + 1 = 2,1 + 2 = 3…2 + 0 = 2,2 + 1 = 3,2 + 2 = 4等,相当于100行真值表。我们还必须考虑到Cin的输入。自从Cin可能是0或1,这意味着现在我们真值表包含200行。您可以创建这个表和使用它来生成一个门电路级实现如果愿意,但我想我会通过。

另一种可能性是使用某种形式的只读存储器(ROM)作为查找表(附近地区)。我们可以利用输入加法器的地址指向位的话,因为我们有9个输入位加法器(A3. .一个0B3B . .0和Cin),这意味着我们将需要一个ROM 29= 512个单词。当然,记住BCD数字可能只使用10的16 4比特二进制组合,我们会有很多浪费行与未使用的组合。也,因为记忆的宽度通常以8位字节的倍数,输出,我们只有5位,我们会浪费每个字节3位。

我们能想出一个更好的方法吗?命运的是,一个相当有趣的实现是可能使用两个4比特二进制小蝰蛇如下图所示。

使用两个4比特二进制实现1-digit BCD 8421加法器
(来源:Max Maxfield)

左边的真值表展示了我们可以获得从第一个4比特的输出二进制加法器基于所有可能的(法律)的组合3. .一个0B3B . .0,Cin输入。右边的真值表显示相应的结果我们从1-digit BCD希望获得8421加法器。

先Cout(“执行”)信号在右边的真值表。我们希望这第一10 0行和1第二10行。我们可以实现这一目标的或与输入相关的行组合突出红色,蓝色,和绿色在左边的真值表。行对应红色区域可以确定使用有限的副本(执行)信号从第一个4比特二进制加法器。行对应蓝色区域可以使用一个确定和输出的年代3和S2从第一个4比特二进制加法器。同样的,相对应的行绿色区域可以使用一个确定和输出的年代3和S1从第一个4比特二进制加法器。

现在让我们将注意力转向第二个二进制加法器,右手组输入的美联储的年代3S . .0从第一个4比特输出二进制加法器。我们看到在右边的真值表,第十行,这对应于Cout = 0, R3R . .0从第二个4比特输出二进制加法器是相同的年代3S . .0从第一个4比特输出二进制加法器。我们可以做到这一点通过迫使左边的第二个二进制输入加法器是0000。

现在考虑过去的10行右边的真值表,对应于Cout = 1。在这种情况下,R3R . .0从第二个4比特输出二进制加法器是平等的年代3S . .0从第一个4比特输出二进制加法器+ 0110(十进制或6)。我们可以做到这一点通过迫使左边的第二个二进制输入加法器是0110。

聪明的部分是,我们使用Cout信号本身来确定是否左边第二个二进制输入加法器是0000年或0110年。

加减BCD数字与逻辑门

以同样的方式,我们使用4比特的补偿器来实现4比特二进制加法和减法的解决方案,我们可以使用一个4位BCD 8421 9的补偿器来实现四位BCD 8421加法和减法解决方案如下图所示。

使用9的补偿器来实现四位BCD加法和减法(来源:Max Maxfield)

一方面,这是非常美味的。另一方面,房间里有一头大象和一只苍蝇在汤(我从来没有比喻我不喜欢)。在我们的一个补偿器的情况下,所有我们要做的就是翻转(反)使用一个非门每个二进制位。悲伤联系,同样是不正确的BCD 8421 9的补偿器的原因是显而易见的,当我们看下面的表。

BCD 8421位模式和9的补充
(来源:Max Maxfield)

当然,我们可以创建一个真值表四BCD 8421位输入和相应的四BCD 8421 9的补位输出,然后用这个来确定所需的逻辑门从一种形式转换成另一个,但只使用不是盖茨比的原因,速度,力量,减少我们的门数。如果我们能获得类似自补BCD码…

自补(和其他)BCD码

所以我们回到古人的智慧。正如我们前面所讨论的那样,BCD据说是8421加权代码,因为它的每个列都有一个与之关联的“重量”。许多其他的加权可能性是可能的,包括4221年BCD, BCD 4311 BCD 5421 BCD 7421,…的例子不胜枚举。有些编码自补,如BCD 2421(也称为艾肯)和Excess-3见下表。

自补(和其他)BCD码(来源:Max Maxfield)

注意,Excess-3,通过增加0011 (3)8421 BCD码,不列为加权代码,因为它不可能分配列权重加起来,如果你明白我的意思。

唯一原因包括美国信息交换标准代码(ASCII)编码的十进制数字0到9这个表是强调的事实,这也是一种BCD编码。事实上,这也被称为区位十进数字表示每一个十进制数字存储在一个字节中,低四位编码位数的BCD形式,而上面的四位,称为“区域”位,(通常)设置为一个固定值。

自补BCD码像Excess-3的伟大之处是,我们可以生成9的补充使用不是盖茨通过反相的位。当然,切换到类似Excess-3意味着我们将不得不替换1-digit BCD 8421加法器1-digit BCD Excess-3同行,但我们会把它留给读者作为练习(这将是你)。

用BCD代表定点和浮点数

很多人认为可以使用BCD只代表无符号和有符号整数,但这绝对不是如此。在现实中,BCD可以用来表示任何形式的数量我们的愿望。在下面的例子中,我们看到,例如,BCD可以用来表示定点和浮点值。

用BCD代表定点和浮点数
(来源:Max Maxfield)

在定点的情况下,我们有通用的形式,包括这两个一个整数部分和小数部分。同时,我们可以表示形式只有整数部分和小数部分。

重要的是要注意,虽然我选择使用16位二进制和16位BCD值在本示例中,我们不是用苹果来比较苹果(苹果aardvark将进一步类比)。例如,一个16位二进制数可以表示216= 65536个不同的值。相比之下,一个16位BCD数量能代表1016= 10000000000000000个不同的值。

在二进制浮点数的情况下,我选择了目前两种格式。FP16, half-precision浮点格式从IEEE 754标准,符号位,五阶位,十一部分碎片。相比之下BF16,男朋友代表“大脑浮点,”最初是由谷歌开发的大脑(一个人工智能(AI)研究小组在谷歌),拥有一个符号位,八指数位,和七个部分。

BF16具有较大的动态范围,但精度小于FP16,越来越发现在人工智能应用程序中使用它通常执行以及32位IEEE FP32单精度浮点格式,提供更高的性能和更低的内存占用,因为额外的尾数部分FP32只是下降。

说实话,我有点蓬松的边缘对浮点格式一般,所以请把上面的插图所示的例子有“粒盐“因为我基本上一起扔给我们谈论的东西。

BCD使用在过去和现在

当人们第一次开始建立机电和电子数字计算机在1940年代早期,他们认为这是有意义的实现它们小数的机器;即电脑代表号码和地址在十进制提供指令来操作这些号码和地址直接在小数,没有转换为一个纯粹的二进制表示。

早期的计算机是专门十进制包括ENIAC, IBM NORC, IBM 650年,IBM 1620, IBM 7070, 80年和UNIVAC固态。在这些机器,数据的基本单位是十进制数字,包括BCD编码的方案之一,。

有趣的是,在第二次世界大战之后,它发现一个成熟的机械计算机称为Z1以前是建立在德国战争的开始。由一个德国工程师叫Konrad Zuse,子是建立在执行计算使用二进制浮点表示。

微处理器出现的时候,二进制表示已经崭露头角,但一些家庭提供有限小数的形式支持下死点加法和减法和/或指示byte-wide BCD数据(包装和打开)转换成二进制格式。

BCD的主要美德,双星系统相比,它更准确的表示和舍入的小数数量,以及易于转换成传统的人类可读的表示。例如,0.1(1/10)小数是容易理解的,而0.1二进制是0.00011001100110011…(即0011无限重复的模式)。底线是,它是不可能来存储二进制小数0.1,相当于为例。

作为一个result-although BCD本身广泛使用不如过去,尽管它是有限的或不可用的新指令sets-decimal定点和十进制浮点格式仍然重要,继续被用于许多金融、商业和工业微妙的转换和分数的计算应用程序中固有的舍入误差二进制格式不能被容忍的。

例如,许多国家法律授权的金融计算在计算机上执行提供完全相同的结果,如果他们进行手工使用铅笔和纸。反过来,这意味着这些计算必须使用某种形式的BCD执行。虽然大多数的电脑只提供有限的硬件支持BCD执行计算,这种计算可以使用软件实现技术。

也感兴趣的是这个事实,世界上绝大多数的电子口袋计算高手,当初此等人物使用涉及大量的输入和输出加上相对小computation-perform魔术只使用BCD表示(由于某种原因,大多数用户更喜欢这样的计算0.1 + 0.2提供的结果0.3,而不是0.299999…)。

只是在家附近一个实际的例子,在写这篇专栏文章时,我想休息和我的朋友聊天乔尼什么的创始人兼首席执行官GridVortex系统在巴西。们GridVortex提供深度嵌入的工程设计和咨询服务安全性至关重要和关键任务系统。

当我告诉约翰我做什么,他回答说:“真巧啊!我只是通过了最后10个小时在移植single-clock-cycle binary-to-BCD逻辑完整的串行处理逻辑的实现。这是我的部分FPGA嵌入式框架。BCD算法PRINT_BIN2ASC块中起着重要的作用,它需要一个可配置的宽度二进制数并输出一个完全格式化的ASCII字符流到流FIFO几乎以相同的方式作为C printf (" % d”, var)声明。”

我问约翰告诉我,他主动提出要把它写在我可以用一种形式。我要包括乔尼的提供,但由于本专栏已经变得面目全非,我决定把它作为一个独立的专栏GridVortex满足BCD——我的酷豆的博客。

黑盒的问题解决方案

最后,但肯定不是最不重要的是,有几种方式攻击所带来的问题在本专栏的开始。我最喜欢的解决办法是由我的密友乔治·哈珀。我提出了这个谜题乔治后不久,他通过电子邮件回应说:“我不认为这是可以做到的。“这消息之后一点,说:“我认错,我有一个想法的了解如何做。”第二天早上,一个无眠之夜后,胜利邮件到达说:“这是可以做到的,这就是你做!”

在这种情况下,“&”代表和“+”代表或,”!的代表。特别是,观察到乔治的解决方案使用只有两个门,我们看到相关方程内部信号0 or1ones0 or2ones

提出和解决问题这曾经是一个受欢迎的消遣的逻辑设计。你呢?这个夏天你有什么难题,你愿意与我们分享吗?你有知识,琐事花絮。或高大的故事告诉BCD有关吗?

28岁的想法“古人之谜:二进制编码的十进制(BCD)”

  1. 马克斯,这是一个很好的文章,一如既往。这并不是因为你慷慨地发表我的那样在我FPGA框架:^)

    我不得不说我决定忘掉二进制和十进制加法器的逻辑,只是重新学习从你参与建设的补充+进位链,和应用程序到九补+ bcd蛇链。

    纯数字设计的乐趣。

    1. 嗨,约翰。
      你写的“纯数字设计的乐趣。“阿门。
      如果我没记错的话,加1的补充“热1”到低阶位置做了减法,已被应用到计算机。

      这是一个不断发展的“源语法”,我认为很容易使用c#解析;请原谅混乱。

      那么就很容易评估控制的布尔表达式和数值表达式的值。

      名字:/ /初始化值
      名称:value1@ value2 / /值= value1 t = value2
      名称:value1@ value2: value3 / /值= num1 t = num2重复每个num3区间
      名字:叫什么名字?bool表达式
      净:net1 ?net2 / / bool节点净值等于bool net1其他如果bool net2是真的假的
      净:bool表达式?bexp2 / / bool节点净值=其他exp1如果bool exp2是真的假的
      的名字吗?bool表达式
      name =数字表达
      总线= bus2 ?/ / bus1净值= bus2值如果网是真的别的零
      总线=表达式?净:0 / /总线=表达式值如果网是真的别的零

      是我输入片段n解析的过程中,编译/在调试模式下构建和运行。
      / /评论
      clk: @ 0: 2
      clk: 1 @ 1: 2
      ':1
      / / [0 . . 3]:[0 . . 3]? c.4
      一个吗?' | k ! j
      b ?一个k !
      c ?b !
      d ?b c !
      e ?c d !
      f ?d e !
      g ?f e !
      h ?f舌!
      j ?g h !
      k ?h强生公司!
      ! ' ?一个
      / / +吗? '
      / / !意味着分配假吗?如果表达式是正确的
      ! ?k&b !
      ! b ?甲!
      ! c ?b&d !
      / /信号表达式也可以使用
      ! d ?_tfd
      ! e ?_tfe
      ! f ?_tff
      ! g ?_tfg
      ! h ?_tfh
      ! j ?_tfj
      ! k ?_tfk

  2. 十进制早期机器相关的注意,有一个有趣的英国机从1951年,值得一提的是十进制计算机。
    女巫计算机,自动计算机器制造执行长的计算为英国原子能计划。
    继电器控制程序音序器,和十进制阀门十进制数存储和处理。
    花了超过10秒完成一个计算,但可以生产天久十进制计算列表。
    值得注意的是,女巫仍在运营,和实际上是有史以来最古老的计算机是原始和运行的今天,在国家博物馆Bletchley Park的计算。
    我亲自去那里看到十年前其重启。

      1. 哦,他们展出的巨人,但是我已经知道了女巫和即将重启,恢复,转而去看。
        tnmoc收藏了令人印象深刻,包括电脑与核心内存和纸带打印机工作。

  3. 你好,马克斯,是一个优秀的“备注栏”。早在1980年代,Flowpro控制软件实际上BCD寄存器类型,因为七段显示器和BCD开关是如此普遍。BCD转换数据时自动移动到或从二进制寄存器或I / O。我们最终删除腾出时间格式等亚型,整数和其他。我还有一些BCD拨轮开关。顺便说一句,我不可以不使用任何解决这个难题。我只会使用三个平行Flowpro机流程图。

    1. 你好罗恩,你说“我可以不使用任何解决这个难题不是盖茨。我只会使用三个平行Flowpro机流程图,“但你会使用隐式倒置你小流氓。

      1. 我认为你是指“隐式反演”作为软件构造?在反相的信号的情况下(是很少做的事情像Flowpro)在一个事件驱动的系统解决方案是一个测试电路结构(决定),两个动作结构和存储结构。相比不是非常高效的一个非门但它没有使用一个工作。Flowpro美是它与布尔电路将更有效的在一些结构。例如,开发一个布尔表达式决定(测试)电路的输入。与Flowpro平行思考真正的问题。

  4. 你好,马克斯你对手一个易怒的,
    伟大的文章。
    我是思考你的PE系列和总有低销数I / O处理器的问题,我有足够的I / O引脚备用吗?
    Arduino幻灯片使用8位端口为一个数字显示器,(我知道你解释简单来说)。
    “我们可以使用CD4511 BCD-to-7-segment译码器”,这是4 I / O引脚最小。有助于减少I / O数。
    最近我不得不使用7段led显示屏,只剩下两个I / O引脚上的处理器。
    最终驱动显示的LS74146系列8位并行移位寄存器,输出的足以打击没有限制电阻的领导。
    不BCD,但它确实意味着你可以驱动任何可能7-seg显示元素的组合与7位串行两个电线,甚至有小数点的使用8位司机8段点。

    最好一个易怒的

    1. “这是你的报应,易怒的。“嗨易怒的,现在我想打开歌词的声音沉默的西蒙和加芬克尔”你好易怒的,我的老朋友,我又来跟你…”就像你说的,我的文章在实际电子,我目前使用8我Arduino的数字输出比特来驱动一个7-segment显示(包括它的DP“小数点”)。未来分期付款我们会看很多不同的方式驱动多个7-segment显示使用更少的别针,除了移位寄存器(就像你说的,让我们来驱动所有的单独部分),我们也将使用多个BCD-to-7-segment解码器,和一个bcd 7-segment译码器多路复用显示的时候,和…但是你必须等待LOL

  5. 做得好!

    为您的下一个行动,一些逻辑块怎么样?如TI的TTL黄色的书。

    然后微程序控制的控制会很有趣。

    这种无稽之谈的使用而不是描述逻辑设计条目已经结束。

    有些语言最近添加条件赋值语句和一个API还支持抽象语法树。相信我,需要有一种重生的逻辑设计。

    一直有一种缺乏逻辑的设计师(现在几乎灭绝)。不,如果()语句是不够的。

    你和我自称是逻辑设计师,我有一个语法和解析器/建筑/调试器的发展。

      1. 如果你有窗户,Visual Studio 2022,想偷看我…布尔逻辑oop杂音项目,我将把它放在DropBox或Git。

        这一开始作为一种新型的电脑,只花了几百附近地区和3双端口块公羊在一个FPGA,难以置信的性能。没有人关心主要是因为工具提供(不支持它(我的理解)

        我一直沮丧,因为管理决策的Verilog必须用于源条目,因为“Verilog可以模拟”。所以我在这里发展自己的工具,试图展示“正确的方式”。

        我有/有CEngine GIT和DropBox。我将试着发布一个链接,下载一个演示。很快我希望有杂音准备好了。晚些时候…

    1. 嗨,丹-我爱卡诺图的地图我总是一个好主意所震撼。你熟悉Reed-Muller逻辑?这里的想法是,一些数字功能很难优化如果他们在传统sum-of-products或product-of-sums形式表示,基于and,口服补液盐,nand闪存,古称,点点头。在某些情况下它可能是更合适的实现函数的形式被称为Reed-Muller逻辑,基于xor和XNORs。我提到这个的原因是一个指示是否一个函数适用于Reed-Muller形式的实现,如果函数卡诺图显示一个棋盘的0和1模式。我讨论这个令人兴奋的在附录C(有些人可能会说痛苦的)详细我的书比波普爵士乐的布尔不羁(https://www.amazon.com/dp/1856175073)

  6. 亲爱的马克斯,
    四天之后,我到的类似的解决方案不是难题,如果是我的学生年(70年代)我相信它将会少得多。我对自己有点失望但是我们变老。
    我的解决方案有一个额外的阶段,我有8个一元输出,即假设输入是一个二进制数,只有一个输出从0到7是“1”。获得所需的输出通过实现一元输出。事实上,你可以任意三个输出真值表的方法。
    谢谢你的出色的专栏,我期待更多的谜题,干杯!
    Hakkı

    输入:A B C (MSB)
    一元输出:情况U1…得以
    输出:背板notB notC

    D = !(公元前AB + AC +) / / 0 or1ones
    E = ! ((ABC + D) (A + B + C)) / / 0 or2ones
    情况=德
    U1 = CD
    U2 = BD
    U3 =公元前
    U4 =广告
    U5 =王牌
    U6 =安
    得以= ABC / /不习惯
    背板=情况+ U1 + U2 + U3
    notB =情况+ U1 + U4 + U5
    notC =情况+ U2 + U4 + U6

    1. 嗨Hakki——我很高兴你喜欢找到解决方案——这是一个很好的感觉当你终于可以说“是的!我得到它!” Thanks so much for letting me know — Max

  7. ChatGPT 3月14版本未能产生一个正确答案,事实上这远非一个解决方案,这是它第一次尝试:
    为了解决这个问题,我们可以使用和和盖茨的组合来实现的逻辑反演输入。这是一个可能的解决方案使用两个大门,一个或门,和三个和盖茨:
    背板= B或C
    NotB =或C
    NotC = A或B

    解释:
    实现背板,我们可以使用一个或门结合输入B和C,如果B或C是1,或门的输出将是1,这将转化为0。如果B和C都是0,或门的输出为0,这将转化为1。
    ………

留下一个回复

有特色的博客
2023年5月11日,
张仁航空论坛2023年,发生在圣地亚哥,加利福尼亚,6月12日至16日,收集成千上万的创新的决策者、企业家、科学家、技术人员、教育工作者,这是唯一的航空活动覆盖整个综合光谱阿维亚……
2023年5月9日
在舒适的硅谷2023,我们举办了一个小组在芯片设计的人工智能,探索如何AI-enabled EDA工具简化SoC设计,加速验证等等。邮局什么在芯片设计的未来人工智能吗?第一次出现在芯片设计的新视野....
2023年5月8日
如果你计划去土耳其在不远的将来,然后我有一个忙问....

有特色的视频

找出最好的定制设计工具刚刚好

节奏设计系统

模拟电路设计领域,我们知道的是进化。所以节奏的技术。学习如何最好的模拟工具刚更好帮助你跟上挑战性的设计问题。AI-powered大师工作室定制设计方案提供了创新的特性,重基础设施的效率,设计生成AI迁移,新级别的集成超出经典设计的界限。

点击这里获取更多信息

以注入式教学法亚博里的电子竞技

EiceDRIVER™F3增强:绝缘栅与DESAT司机
高功率应用程序时,电流的隔离门司机可以很好解决方案模块和碳化硅mosfet。注入式教学法在这节课中,阿米莉亚道尔顿亚博里的电子竞技和伊曼纽尔埃尼英飞凌检查英飞凌的EiceDRIVER™F3增强绝缘栅司机的家人。他们仔细看看电隔离和关键特性的优点和好处,这门驱动器家庭可以带给你的下一个设计。
2022年9月12日
27950的浏览量
Baidu