当我知道每个逻辑门已经在C
. 例如,对于AND
逻辑门,符号是&
。对于OR
,它是|
。但我找不到MUX
芯片的符号。
那么,如果有 的符号MUX
,有人可以告诉我吗?如果没有,有人可以告诉我如何MUX
在 C 中复制芯片吗?
当我知道每个逻辑门已经在C
. 例如,对于AND
逻辑门,符号是&
。对于OR
,它是|
。但我找不到MUX
芯片的符号。
那么,如果有 的符号MUX
,有人可以告诉我吗?如果没有,有人可以告诉我如何MUX
在 C 中复制芯片吗?
最接近的是条件运算符: ?
:
例如:
x ? b : a
如果 你得到x
如果它(或其他任何东西)你得到0
a
1
b
这个操作符作用于整个值,like||
&&
==
和!
do。它不像^
~
&
和|
那样对位进行操作。
多输入多路复用器没有直接的等价物。但是您可以使用匿名数组伪造一个,例如:
((int[]){a,b,c,d,})[x]
但许多人不赞成这种形式的结构。
如果您需要按位多路复用器,则需要从按位运算符构建它,例如:
a ^ (( b ^ a ) & x)
请注意,C 的抽象级别比逻辑门高得多,因此进行此类比较可能会导致混淆。也就是说,您可能最接近解复用器(我将从它开始,因为它更简单)是左移运算符:
a << b
这个表达式,假设a
和b
是int
表达式,将产生一个新int
的,其位是a
左移的位b
。例如,如果a
is0100011011010110
并且b
是 3,则结果将为0011011010110000
。现在,如果a
是 0 或 1,并且您将结果整数解释为总线,则这对应于解复用器。
多路复用器/选择器可以通过右移运算符 >>
来实现,它将位右移。但是,结果必须&
使用 1 来清除除您感兴趣的位之外的任何其他位:
(c >> b) & 1
这有效地从 中选择索引b
处的位(从最低有效位开始)c
。
C 有四个位运算符:
&
, 如a & b
|
, 如a | b
^
, 如a ^ b
~
,,如~a
没有MUX
操作员。
小心你的措辞。这些称为按位运算符,类似于应用于整数类型中所有位的逻辑门。在 C中,逻辑运算符是不同的。
、|
和运算&
符~
是按位运算符。它们在操作数中的各个位上并行工作。多路复用器没有相应的位运算符。三元运算符:
output = cond ? a : b
接近,但选择器操作数被视为单个位,而不是位向量(即,所有输出位来自a
或所有输出位来自b
,你不能让一些输出位来自a
和一些来自b
)。要获得真正的按位多路复用器,其中选择器是从a
or中选择单个位的向量b
,您可以按照从离散逻辑门构建的方式来实现它:
output = (cond & a) | (~cond & b);
这里,a 1
in a cond
bit 允许对应的 bit froma
通过,并阻止对应的 bit from b
(因为b
被反相条件屏蔽了)。0
位中的Acond
阻止来自 的相应位a
,并允许来自 的相应位b
通过。这两个掩码值是按位或在一起的,因此输出的位是来自 的相应位a
,b
具体取决于 中相应位的状态c
。