2016-01-17 16 views
5

Studiowałem bramki logiczne, gdy dowiedziałem się, że każda brama logiczna została już zdefiniowana w C. Na przykład dla bramy logicznej AND, symbolem jest &. Dla OR jest to |. Ale nie mogłem znaleźć symbolu dla układu MUX.Co to jest symbol układu `mux` w C?

Jeśli więc istnieje symbol dla MUX, czy ktoś może mi powiedzieć? Jeśli tak nie jest, czy ktoś mógłby mi powiedzieć, jak skopiować mikroprocesor MUX w C?

+0

Jak dokładnie można oczekiwać pracy operatora MUX? Jak dostarczysz swoje dane wejściowe? – Dmitri

+0

@Dmitri, zrobiłbym funkcję, w której będę przekazywał jej dane wejściowe. –

Odpowiedz

3

Należy pamiętać, że C działa na znacznie wyższym poziomie abstrakcji niż logiczne bramki, więc dokonywanie takich porównań może prowadzić do nieporozumień. Powiedział, że najbliżej można dojść do demultiplekser (Zacznę że ponieważ jest to prostsze) jest lewo operatora przesunięcia:

a << b 

Wyrażenie to, zakładając, że a i bint wyrażenia , wyprodukuje nowy int, którego bity są bitami a przesuniętymi w lewo o kilka razy w lewo b. Na przykład, jeśli a jest 0100011011010110 i b wynosi 3, wynikiem będzie 0011011010110000. Teraz, jeśli a ma wartość 0 lub 1 i interpretujesz wynikową liczbę całkowitą jako magistralę, odpowiada to demultiplekserowi.

multiplekser/selektor mogą być realizowane przez operatora przesunięcie w prawo>> bitów, który przesuwa się w prawo. Jednak wynik musi być & „ed z 1 w celu usunięcia jakichkolwiek innych bitów niż ta, którą zainteresowały:

(c >> b) & 1 

To skutecznie wybiera kawałek w indeksie b (począwszy od najmniej znaczącego bitu) z c.

+0

Dlaczego upadek? –

+0

Więc chcesz powiedzieć, że nie możesz zrobić 'MUX' w' C'? (Nawiasem mówiąc, nie przesłałem ani nie popieram nikomu odpowiedzi do tej pory). –

+0

Wygląda na to, że wszyscy mamy jeden, z wyjątkiem jednej odpowiedzi, która natychmiast została przegłosowana. Pójdę do przodu i zlikwiduję otrzymane głosy. – Adam

1

C ma cztery bitowe operatory:

  • I, &, jak w a & b
  • OR, |, jak w a | b
  • XOR ^, jak w a^b
  • NOT, ~, jak w ~a

Nie ma operatora MUX.

Uważaj na swoje frazowanie. Są one nazywane operatorami bitowymi i są analogiczne do bramek logicznych zastosowanych do wszystkich bitów w typie integralnym. W C logiczne operatory są różne.

+0

Więc czy istnieje sposób na wykorzystanie chipa 'MUX' przy użyciu tych? –

+3

@AshishAhuja a MUX to nie jest coś, co normalnie kodowałbyś na poziomie C. To samo zadanie zwykle wykonuje się na kilka innych sposobów, takich jak warunkowe ('if',' switch' lub '?:') Oraz sprawdzanie tablicy, pakowanie bitowe lub inne. Wszystko zależy od tego, do czego chcesz użyć MUX. Pamiętaj, że C nie jest językiem sprzętowym, to język wysokiego poziomu. – Adam

+0

dzięki za poinformowanie mnie o tym, ale jeśli chcesz to zrobić, co jest nie tak. Robię to, ponieważ uczyłem się obwodów i sprzętu. I nie chciałem robić lutowania, ponieważ ostatni, który zrobiłem lutowanie na obwodzie, spaliłem jeden z moich palców. –

6

Najbliżej jest operator warunkowy: ?:

np

x ? b : a 

jeśli x jest 0 masz a czy to 1 (lub czegokolwiek innego) można dostać b

Ten operator działa na całych wartościach, takich jak ||&&== i ! do. To nie działa na bitach, jak ^~ i | do.

Nie ma bezpośredniego odpowiednika wielozakresowego mux. ale może fałszywy użyciem anonimowej tablicy, np jesteś:

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

ale wiele osób krzywi się na konstrukcji tego formularza.

jeśli trzeba mux bitowe trzeba zbudować go od bitowe operatorów np

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

W |, & i ~ operatorzy są operatory bitowe. Działają równolegle na poszczególnych bitach w operandach. Nie ma odpowiedniego operatora bitowego dla multipleksera. Trójoperandowy operator:

output = cond ? a : b 

zbliża, ale operand selektor jest traktowany jako pojedynczy bit, a nie wektor bitów (czyli wszystkie bity wyjściowe pochodzą z a lub wszystkie bity wyjściowe pochodzą z b, ty nie mogą mieć niektórych bitów wyjściowych pochodzących z a, a niektóre pochodzą z b). Aby uzyskać prawdziwy multiplekser bitowe, gdzie selektor jest wektorem, który wybiera poszczególne bity od a lub b, można wdrożyć go w sposób chcesz zbudować jedną z dyskretnych bramek logicznych:

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

tu, 1 w sposób cond bit umożliwia przejście odpowiedniego bitu z a i blokuje odpowiadający mu bit z b (ponieważ b jest zamaskowany warunkiem odwrotnym). Bit 01 blokuje odpowiedni bit od a i umożliwia przejście odpowiedniego bitu z b. Dwie zamaskowane wartości są bitowo połączone razem, więc bitem wyjściowym jest albo odpowiedni bit z a z b, w zależności od stanu odpowiedniego bitu w c.