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