5

当我知道每个逻辑门已经在C. 例如,对于AND逻辑门,符号是&。对于OR,它是|。但我找不到MUX芯片的符号。

那么,如果有 的符号MUX,有人可以告诉我吗?如果没有,有人可以告诉我如何MUX在 C 中复制芯片吗?

4

4 回答 4

6

最接近的是条件运算符: ? :

例如:

 x ? b : a 

如果 你得到x如果它(或其他任何东西)你得到0a1b

这个操作符作用于整个值,like|| && ==!do。它不像^ ~ &|那样对位进行操作。

多输入多路复用器没有直接的等价物。但是您可以使用匿名数组伪造一个,例如:

 ((int[]){a,b,c,d,})[x]

但许多人不赞成这种形式的结构。

如果您需要按位多路复用器,则需要从按位运算符构建它,例如:

 a ^ (( b ^ a ) & x)
于 2016-01-17T05:47:06.300 回答
4

请注意,C 的抽象级别比逻辑门高得多,因此进行此类比较可能会导致混淆。也就是说,您可能最接近解复用器(我将从它开始,因为它更简单)是左移运算符

a << b

这个表达式,假设abint表达式,将产生一个新int的,其位是a左移的位b。例如,如果ais0100011011010110并且b是 3,则结果将为0011011010110000。现在,如果a是 0 或 1,并且您将结果整数解释为总线,则这对应于解复用器。

多路复用器/选择可以通过右移运算符 >>来实现,它将位右移。但是,结果必须&使用 1 来清除除您感兴趣的位之外的任何其他位:

(c >> b) & 1

这有效地从 中选择索引b处的位(从最低有效位开始)c

于 2016-01-17T05:44:38.323 回答
1

C 有四个位运算符:

  • AND, &, 如a & b
  • 或, |, 如a | b
  • 异或, ^, 如a ^ b
  • 不是~,,如~a

没有MUX操作员。

小心你的措辞。这些称为按位运算符,类似于应用于整数类型中所有位的逻辑门。在 C中,逻辑运算符是不同的。

于 2016-01-17T05:43:18.670 回答
1

|和运算&~是按位运算符。它们在操作数中的各个位上并行工作。多路复用器没有相应的位运算符。三元运算符:

output = cond ? a : b

接近,但选择器操作数被视为单个位,而不是位向量(即,所有输出位来自a或所有输出位来自b,你不能让一些输出位来自a和一些来自b)。要获得真正的按位多路复用器,其中选择器是从aor中选择单个位的向量b,您可以按照从离散逻辑门构建的方式来实现它:

output = (cond & a) | (~cond & b);

这里,a 1in a condbit 允许对应的 bit froma通过,并阻止对应的 bit from b(因为b被反相条件屏蔽了)。0位中的Acond阻止来自 的相应位a,并允许来自 的相应位b通过。这两个掩码值是按位或在一起的,因此输出的位是来自 的相应位ab具体取决于 中相应位的状态c

于 2016-01-17T06:11:43.007 回答