2016-01-17 13 views
5

Stavo studiando le porte logiche quando ho saputo che ogni porta logica era già definita in C. Ad esempio, per il gate logico AND, il simbolo è &. Per OR, è |. Ma non sono riuscito a trovare un simbolo per il chip MUX.Qual è il simbolo del chip `mux` in C?

Quindi, se c'è un simbolo per MUX, qualcuno potrebbe dirmelo? Se non c'è, qualcuno potrebbe dirmi come replicare un chip MUX in C?

+0

In che modo esattamente ti aspetti che un operatore MUX funzioni? Come vorresti fornire i suoi input? – Dmitri

+0

@Dmitri, vorrei fare una funzione in cui passerò i suoi input. –

risposta

3

Si prega di notare che C opera ad un livello molto più alto di astrazione rispetto alle porte logiche, quindi effettuare tali confronti potrebbe portare a confusioni. Detto questo, il più vicino si potrebbe arrivare ad una demultiplatore (Comincerò con che dal momento che è più semplice) è il operatore di spostamento a sinistra:

a << b 

Questa espressione, assumendo che a e b sono int espressioni , produrrà un nuovo int i cui bit sono i bit di a spostati a sinistra b volte. Ad esempio, se a è 0100011011010110 e è 3, il risultato sarà 0011011010110000. Ora, se a è 0 o 1 e si interpreta il numero intero risultante come un bus, ciò corrisponde a un demultiplexer.

Un multiplexer/selettore può essere attuata dall'operatore shift verso destra>>, che sposta i bit verso destra. Tuttavia, il risultato deve essere & 'cato con 1 per chiarire eventuali altri bit diversi da quello eri interessato:

(c >> b) & 1 

Questo seleziona efficacemente il bit di indice b (partendo dal bit meno significativo) dal c.

+0

Perché il downvote? –

+0

Quindi intendi dire che non puoi creare un 'MUX' in' C'? (A proposito, finora non ho votato a bassa voce o sviato la risposta di nessuno). –

+0

Sembra che ne abbiamo tutti uno tranne una risposta che ha subito un upvoted. Andrò avanti e cancellerò il downvote che hai ottenuto. – Adam

1

C dispone di quattro operatori bit a bit:

  • E, &, come in a & b
  • O, |, come in a | b
  • XOR, ^, come in a^b
  • NON, ~, come in ~a

Non c'è l'operatore MUX.

Fai attenzione al tuo fraseggio. Questi sono chiamati operatori per bit e sono analoghi alle porte logiche applicate a tutti i bit in un tipo integrale. In C logico gli operatori sono diversi.

+0

Quindi c'è un modo per creare un chip 'MUX' usando questi? –

+3

@AshishAhuja un MUX non è qualcosa che normalmente si codifica al livello C. Lo stesso compito viene solitamente eseguito in molti altri modi, come un condizionale ('if',' switch' o '?:'), E ricerca di array, bit di compressione o altri. Tutto dipende da cosa si desidera utilizzare il MUX per. Ricorda che C non è un linguaggio hardware, è un linguaggio di alto livello. – Adam

+0

grazie per avermelo informato, ma se vuoi farlo, cosa c'è che non va. Lo sto facendo mentre stavo imparando circuiti e hardware. E, non volevo fare la saldatura, come l'ultima volta che ho fatto la saldatura su un circuito, ho bruciato un dito. La saldatura –

6

più vicino è l'operatore condizionale: ?:

esempio:

x ? b : a 

se x è 0 si ottiene a se è 1 (o qualsiasi altra cosa) si ottiene b

questo operatore funziona su valori interi, come ||&&== e ! fare. Non funziona su bit come ^~& e | do.

Non esiste un equivalente diretto per un mux multi-input. ma è possibile un falso utilizzando un array anonimo, ad esempio:

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

ma molte persone cipiglio su costruzioni di quella forma.

se avete bisogno di un mux bit a bit è necessario costruire da parte degli operatori bit a bit esempio:

a^((b^a) & x) 
1

I |, & e ~ operatori sono operatori bit a bit. Funzionano in parallelo su singoli bit negli operandi. Non esiste un operatore bit a bit corrispondente per un multiplexer. L'operatore ternario:

output = cond ? a : b 

si avvicina, ma l'operando selettore viene trattato come un singolo bit, e non un vettore di bit (cioè, tutti i bit di uscita vengono da a o tutti i bit di uscita vengono da b, è non è possibile che alcuni bit di uscita provengano da a e alcuni provengano da b). Per ottenere una vera multiplexer bit per bit, in cui il selettore è un vettore che seleziona singoli bit da a o b, è possibile implementare il modo in cui si crea uno da porte logiche discrete:

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

Qui, un 1 in un cond bit consente di passare il bit corrispondente da a e blocca il bit corrispondente da b (perché b è mascherato con la condizione inversa). Un 0 in un bit cond blocca il bit corrispondente da a e consente il passaggio del bit corrispondente da . I due valori mascherati sono OR bit a bit insieme, quindi un bit di output è il bit corrispondente da a di b, a seconda dello stato del bit corrispondente in c.

Problemi correlati