Jak działa xor. Operatory logiczne VBA. Schemat identyfikacji zbocza i odcięcia impulsu

C++. Operacje logiczne. Bitowe operacje logiczne. Operacje zmianowe. Operacja XOR

1. Dla jakich typów można stosować operacje logiczne, bitowe operacje logiczne i operacje przesunięcia?

Operacje logiczne, bitowe operacje logiczne i operacje przesunięcia można stosować tylko na argumentach typu całkowitego.

2. Jakie operacje logiczne są używane w C/C++?

W języku programowania C/C++ stosowane są następujące operacje logiczne:

  • && – logiczne „AND”;
  • || – logiczne „LUB”;
  • ! – logiczne „NIE”.

Wynikiem operacji logicznych jest wartość false lub true . W C++ za wartość false uważa się 0, a za prawdę uważa się za 1.

Z tego możemy wywnioskować, że fałszywe< true . Например:

//operacje logiczne wartość boolowa; res = fałsz< true ; // res = true
3. Tablica prawdy operacji logicznych

Tabela prawdy operacji logicznych && (logiczne „ORAZ”), || (logiczne „LUB”), ! (logiczne „NIE”) ma następującą postać:

W języku C/C++ przyjmuje się, że fałsz ma wartość 0, a prawda nie jest równa 0 (dowolna niezerowa wartość całkowita).

4. Przykłady wykorzystania operacji logicznych w C++

Przykład 1. Operacja logiczna połączona z wyrażeniem boolowskim

//operacje logiczne wartość boolowa; int a, b; // operacja && (AND) a = 8; b = 5; res = a && b; // res = prawda a = 0; res = a && b; // res = False // operacja || (LUB) a = 0; b = 0; res = a || B; // res = fałsz b = 7; res = a || B; // res = Prawda // operacja! (logiczne „NIE”) a = 0; res = !a; // res = prawda a = 15; res = !a; // res = fałsz

Przykład 2. Operacje logiczne w wyrażeniach warunkowych. Oto fragment kodu, w którym w instrukcji if zastosowano operację logiczną.

// operacje logiczne w wyrażeniach warunkowych int a, b; wartość boolowa; a = 0; b = 3; res = fałsz; if (a && b) res = true ; // res = fałsz a = 0; b = 7; if (a || b) res = true ; // res = prawda
5. Jakie bitowe operacje logiczne są używane w C/C++?

Język C/C++ obsługuje następujące bity operacje logiczne:

  • & – bitowe logiczne AND (AND);
  • ^ – bitowe dodawanie modulo 2 (XOR – wyłączne OR);
  • | – bitowe logiczne OR (OR);
  • ~ – inwersja bitowa (NIE).

Operacje & , ^ , | są binarne. Oznacza to, że wymagają dwóch operandów. Bity dowolnego operandu są porównywane ze sobą w następujący sposób: reguła: Bit na pozycji 0 pierwszego argumentu jest porównywany z bitem na pozycji 0 drugiego operandu. Bit na pozycji 1 pierwszego argumentu jest następnie porównywany z bitem na pozycji 1 drugiego argumentu. Porównuje to wszystkie bity operandów całkowitych.

6. Tablica prawdy bitowych operacji logicznych

Każdy bit wyniku jest określany na podstawie dwóch operandów, które są bitami, jak pokazano w tabeli.

Inwersja wymaga jednego operandu po prawej stronie znaku ~. Wynik uzyskuje się poprzez bitową inwersję wszystkich bitów operandu.

7. Przykład pracy z logicznymi operacjami bitowymi

Niech zostaną podane dwie liczby 17 i 45 typu unsigned short int. Każda liczba zajmuje 1 bajt lub 8 bitów w pamięci. Poniżej znajduje się przykład sposobu wykonywania obliczeń dla każdej operacji bitowej

Jak widać z przykładu, na każdym bicie wykonywana jest określona operacja.

8. Jakie operacje przesunięć są używane w C/C++?

Język C/C++ zawiera dwie operacje bitowe zmiana:

  • << – przesuwa wartość argumentu w lewo o określoną liczbę bitów. Operand jest umieszczony po lewej stronie znaku operacji. Liczba bitów do przesunięcia jest wskazana po prawej stronie znaku operacji;
  • >> – przesuwa wartość argumentu w prawo o określoną liczbę bitów. Operand jest umieszczony po lewej stronie znaku operacji (<<). Liczba bitów do przesunięcia jest umieszczona po prawej stronie znaku operacji.

Bity rysowania są tracone, a bity zerowe są „wchodzące”. Przesunięcie operandów w lewo o 1, 2, 3 lub więcej cyfr to najszybszy sposób mnożenia przez 2, 4, 8, ... Przesunięcie operandów w prawo o 1, 2, 3 lub więcej cyfr to najszybszy sposób dzielenia o 2, 4, 8, ...

Jeśli program wymaga operacji mnożenia argumentów całkowitych przez 2, 4, 8 itd. nastąpiło tak szybko, jak to możliwe, zaleca się użycie operacji z przesunięciem w lewo.

Dotyczy to również przypadków, gdy trzeba szybko podzielić operand całkowity przez 2, 4, 8 itd. W takich przypadkach zaleca się użycie przesunięcia w prawo.

9. Przykłady wykorzystania operacji przesunięć w programie
// Operacje zmiany int a; int b; intc; a = 15; b = -5; // przesuń w lewo – pomnóż c = a<< 1; // c = a * 2^1 = 30 c = b << 2; // c = b * 2^2 = -20 // przesunięcie w prawo - dzielenie do = za >> 3; // c = a / 2^3 = 1 c = b >> 1; // c = b / 2^1 = -3
10. Jaka jest różnica pomiędzy operacjami logicznymi a bitowymi operacjami logicznymi?

Operacje logiczne porównują całą wartość dwóch operandów. Każdy z operandów może być prawdziwy lub fałszywy. Język C/C++ umożliwia porównywanie operandów będących liczbami całkowitymi. W tym przypadku wartość całkowita 0 odpowiada wartości false , a wartość różna od zera (dowolna inna) odpowiada wartości true .

funkcja, którą pełnią, jest nieco bardziej złożona niż w przypadku elementu AND lub elementu OR. Wszystkie wejścia bramek XOR są równe, ale żadne wejście nie może blokować pozostałych wejść, ustawiając wyjście na jeden lub zero. Tabela 4.1. Tabela prawdy dwuwejściowe wyłączne elementy OR
Wejście 1 Wejście 2 Wyjście
0 0 0
0 1 1
1 0 1
1 1 0


Ryż. 4.1.

Funkcja Exclusive OR oznacza, że: jedynka pojawia się na wyjściu, gdy tylko jedno wejście ją posiada. Jeśli na wejściach znajdują się dwie lub więcej jedynek lub jeśli wszystkie wejścia mają wartość zerową, wówczas na wyjściu będzie zero. Tabela prawdy element dwuwejściowy Ekskluzywny OR podano w tabeli. 4.1. Oznaczenia przyjęte w schematach krajowych i zagranicznych przedstawiono na ryc. 4.1. Napis na krajowym oznaczeniu elementu Exclusive OR „=1” oznacza po prostu, że sytuacja jest podkreślona, ​​gdy na wejściach jest tylko jedna jednostka.

W standardowej serii występuje niewiele elementów XOR. Seria domowa oferuje mikroukłady LP5 (cztery elementy dwuwejściowe z wyjściem 2C), LL3 i LP12, które różnią się od LP5 wyjściem OK. Elementy te realizują zbyt specyficzną funkcję.

Z matematycznego punktu widzenia element XOR wykonuje operację tzw. sumowania modulo-2, dlatego elementy te nazywane są także sumatorami modulo-2. Jak wspomniano w poprzednim wykładzie, sumowanie modulo 2 jest oznaczone znakiem plusa w okręgu.

Głównym zastosowaniem elementów jest ekskluzywne LUB, które wynika bezpośrednio z tablice prawdy, polega na porównaniu dwóch sygnałów wejściowych. W przypadku pojawienia się na wejściach dwóch jedynek lub dwóch zer (sygnały pokrywają się), na wyjściu powstaje zero (patrz tabela 4.1). Zwykle w tym zastosowaniu do jednego wejścia elementu przykładany jest stały poziom, z którym porównywany jest zmienny w czasie sygnał docierający do drugiego wejścia. Ale znacznie częściej do porównywania sygnałów i kodów stosuje się specjalne mikroukłady komparatory kodów, o czym będzie mowa w następnym wykładzie.

Jako sumator modulo 2 element XOR jest również używany w równoległych i szeregowych dzielnikach modulo 2 używanych do obliczania cyklicznych sum kontrolnych. Ale te schematy zostaną szczegółowo omówione w wykładach 14,15.

Ważnym zastosowaniem elementów XOR jest sterowany falownik (rys. 4.2). W tym przypadku jedno z wejść elementu pełni funkcję sterującą, a na wejście drugiego elementu odbierany jest sygnał informacyjny. Jeżeli wejście sterujące ma wartość jeden, wówczas sygnał wejściowy jest odwracany, natomiast jeśli wynosi zero, nie jest odwracany. Częściej sygnał sterujący ustawiany jest na stałym poziomie, określającym tryb pracy elementu, a sygnał informacyjny ma charakter pulsacyjny. Oznacza to, że element XOR może, ale nie musi, zmieniać polaryzację sygnału wejściowego lub zbocza, w zależności od sygnał sterujący.


Ryż. 4.2.

W przypadku, gdy występują dwa sygnały o tej samej polaryzacji (dodatnia lub ujemna) i wykluczone jest ich jednoczesne przybycie, można zastosować element Exclusive OR do miksowania tych sygnałów (rys. 4.3). Dla dowolnej polaryzacji sygnałów wejściowych sygnały wyjściowe elementu będą dodatnie. Dla dodatnich sygnałów wejściowych bramka XOR będzie działać jak bramka 2OR, a dla wejść ujemnych zastąpi bramkę 2AND-NOT. Takie zamienniki mogą być przydatne w przypadkach, gdy niektóre elementy Exclusive OR pozostają nieużywane w obwodzie. To prawda, należy to wziąć pod uwagę opóźnienie propagacji Sygnał w elemencie XOR jest zwykle nieco większy (około 1,5 razy) niż opóźnienie w najprostszych elementach AND, NAND, OR, NOR.

W praktyce najczęściej używanymi elementami dwuwejściowymi są „wyłączne LUB”. Na ryc. Na rysunku 1 przedstawiono konwencjonalne oznaczenie graficzne elementu bez inwersji oraz tablicę jego stanów. Mówiąc najprościej, istota tego elementu sprowadza się do tego, że sygnał wyjściowy pojawia się tylko wtedy, gdy poziomy logiczne na wejściach nie są takie same.

Schemat identyfikacji zbocza i odcięcia impulsu

W tym obwodzie do opóźnienia impulsów służą trzy bramki XOR. DD1.4 - sumowanie. Impulsy wyjściowe mają stabilne zbocza narastające i opadające. Czas trwania każdego impulsu wyjściowego jest równy trzykrotnemu czasowi opóźnienia przełączania każdego z trzech elementów. Odstęp czasu pomiędzy zboczami impulsów wyjściowych jest równy czasowi trwania impulsu wejściowego. Urządzenie to podwaja również częstotliwość sygnału wejściowego.

Istnieje jeszcze jedna interesująca właściwość o nazwie „Wyłączne OR”. Jeśli na jedno z wejść zostanie przyłożone stałe „0”, wówczas sygnał na wyjściu elementu powtórzy sygnał wejściowy, a jeśli stałe „0” zostanie zmienione na stałe „1”, wówczas sygnał wyjściowy będzie już być inwersją sygnału wejściowego.

Czasami konieczne staje się uzyskanie „wyłącznej bramki OR” z poszczególnych standardowych bramek logicznych. Przykładem jest obwód elementu „ekskluzywnego OR” zaimplementowany na czterech elementach 2-AND-NOT. Rysunek 3 przedstawia obwód XOR w czterech stanach. Pokazuje to wszystkie możliwe poziomy logiczne na każdej z zastosowanych bramek logicznych 2-NAND.

Takie elementy są uwzględnione na schemacie. W tym obwodzie element „Exclusive OR” składa się z czterech elementów 2-AND-NOT zawartych w jednym pakiecie mikroukładu K561LA7.

Generator sygnału dyskretnego o częstotliwości różnicowej

Obwód sterownika pokazano na rysunku 4. Tutaj element logiczny wyłączności OR jest również zaimplementowany na czterech elementach 2-AND-NOT.

Na wejścia 1 i 2 układu kształtującego padają impulsy prostokątne (patrz wykresy 1 i 2), które różnią się częstotliwością powtarzania. Węzeł oparty na elementach logicznych DD1.1-DDI.4 mnoży te sygnały. Wyjściowy sygnał impulsowy (wykres 3) z elementu DD1.4 podawany jest do układu całkującego R3, C1, który przetwarza go na sygnał trójkątny (wykres 4) o częstotliwości równej różnicy częstotliwości sygnałów wejściowych, oraz wzmacniacz operacyjny DA1 przetwarza odebrany sygnał na falę prostokątną (patrz. harmonogram 5). Rezystor R1 reguluje czas trwania dodatnich i ujemnych półfali sygnału wyjściowego. Bardzo ciekawy schemat. Projektant radia ma nad czym myśleć. Na przykład sygnał pokazany na trzecim wykresie jest sygnałem sinusoidalnym PWM.
Oczywiście zakres stosowania elementów „wyłącznego OR” jest znacznie szerszy. Przedstawiłem tutaj, moim zdaniem, ciekawsze dla radioamatorów.

W tym artykule porozmawiamy o niektórych operacjach bitowych. Spójrzmy na główne: XOR (wyłącznie OR), AND, NOT i OR.

Jak wiadomo, minimalna jednostka miary informacji to fragment, który przechowuje jedną z 2 wartości: 0 ( FAŁSZ, fałsz) lub 1 ( PRAWDA, PRAWDA). Zatem komórka bitowa może znajdować się w danym momencie tylko w jednym z dwóch możliwych stanów.

Aby manipulować bitami, stosuje się pewne operacje - logiczne lub logiczne. Można je zastosować do dowolnego bitu, niezależnie od tego, czy jego wartość wynosi zero, czy jeden. Cóż, spójrzmy na przykłady użycia trzech podstawowych operacji logicznych.

Operacja logiczna ORAZ (i)

I oznaczony przez &.

Operator AND jest wykonywany na 2 bitach, weźmy na przykład aib. Wynikiem operacji AND jest 1, jeśli a i b są równe 1. W przeciwnym razie wynikiem jest 0. Na przykład, używając AND, możesz sprawdzić, czy liczba jest parzysta, czy nie.

Spójrz na tabelę prawdy operacji AND:

Operacja logiczna OR (OR)

Wskazane przez | .

Operator LUB również wykonane z 2 bitami (aib). Wynikiem jest 0, jeśli a i b wynoszą 0, w przeciwnym razie jest to 1. Spójrz na tabelę prawdy.

Operacja logiczna XOR (wyłączne OR)

Operator XOR jest oznaczony przez ^.

XOR wykonywane z 2 bitami (aib). Wynik operacji XOR ( wyłączne LUB) wynosi 1, gdy jeden z bitów b lub a wynosi 1. W przeciwnym razie wynikiem zastosowania operatora XOR będzie 0.

Tabela prawdy operacji logicznych dla XOR (wyłącznego OR) wygląda następująco:

Za pomocą XOR (wyłączne OR) możesz zmienić wartości 2 zmiennych tego samego typu danych bez użycia zmiennej tymczasowej. Możesz także szyfrować tekst za pomocą XOR, na przykład:

String msg = "To jest wiadomość"; wiadomość char = msg.toCharArray(); Klucz ciągu = ".*)"; String zaszyfrowanyString = nowy String(); for(int i = 0; tj< message.length; i++){ encryptedString += message[i]^key.toCharArray(); }

Zgadzam się, że XOR jest daleki od najbardziej niezawodnej metody szyfrowania, ale to nie znaczy, że nie można go włączyć do żadnego algorytmu szyfrowania.

Operacja logiczna NIE (NIE)

Jest to negacja bitowa, dlatego jest wykonywana z jednym bitem i jest oznaczona przez ~ .

Wynik zależy od stanu bitu. Jeśli jest w stanie zerowym, to wynikiem operacji jest jeden i odwrotnie. Wszystko jest niezwykle proste.

Te 4 operacje logiczne należy zapamiętać w pierwszej kolejności, ponieważ za ich pomocą można uzyskać niemal każdy możliwy wynik. Istnieją również operacje takie jak<< (побитовый сдвиг влево) и >> (bitowe przesunięcie w prawo).

Instrukcja XOR w języku asemblera wykonuje wyłączną operację OR pomiędzy wszystkimi bitami dwóch operandów. Wynik operacji XOR jest zapisywany do pierwszego operandu. Składnia:

ODBIORNIK XOR, ŹRÓDŁO

Instrukcja XOR zawsze resetuje CF i OF, a także (w zależności od wyniku) zmienia flagi SF, ZF i PF. Wartość flagi AF może być dowolna - nie zależy to od wyniku operacji.

ODBIORNIK może być jednym z poniższych:

  • Obszar pamięci (MEM)

ŹRÓDŁO może być jednym z następujących:

  • Obszar pamięci (MEM)
  • Rejestr ogólnego przeznaczenia (REG)
  • Wartość natychmiastowa - stała (IMM)

Z zastrzeżeniem ograniczeń opisanych powyżej, kombinacje ODBIORNIK-ŹRÓDŁO mogą być następujące:

REG, MEM MEM, REG REG, REG MEM, IMM REG, IMM

Ekskluzywna operacja OR

Podczas wykonywania operacji wyłącznej OR wartość wyniku będzie równa 1, jeśli porównywane bity są różne (nierówne). Jeżeli porównywane bity mają tę samą wartość, wówczas wynikiem będzie 0.

Dlatego tę operację nazywa się wyłączną. Wyklucza z porównania identyczne bity i wykonuje operację na nierównych bitach.

Ponieważ jednak dowolna para nierównych bitów to 0 i 1, logiczna operacja OR da w wyniku 1.

Ekskluzywna tabela prawdy OR

Tabela prawdy XOR znajduje się poniżej:

0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0

Cechy operacji XOR

Operacja XOR ma właściwość odwracalności. Jeśli zostanie wykonane dwukrotnie z tym samym argumentem, wartość wyniku zostanie odwrócona. Oznacza to, że jeśli wykonasz tę operację dwukrotnie między bitami X I Y, to w efekcie końcowym otrzymamy pierwotną wartość bitową X.

0 XOR 0 = 0 XOR 0 = 0 0 XOR 1 = 1 XOR 1 = 0 1 XOR 0 = 1 XOR 0 = 1 1 XOR 1 = 0 XOR 1 = 1

Właściwość tę można wykorzystać np. do prostego szyfrowania danych (więcej o tym innym razem).

Sprawdzanie flagi parzystości po operacji XOR

Polecenie XOR działa z operacjami 8-, 16- i 32-bitowymi.

Czasami istnieje potrzeba sprawdzenia po wykonaniu operacji flagi parzystości PF, aby dowiedzieć się, ile bitów jednostkowych (parzystych lub nieparzystych) znajduje się w niski bajt wynik (jest to konieczne nie tylko podczas wykonywania operacji XOR, ale także podczas wykonywania innych operacji arytmetycznych i logicznych).

Jeśli ustawiona jest flaga parzystości, wynikiem jest parzysta liczba jeden bitów. W przeciwnym razie flaga zostanie zresetowana.

Możesz także po prostu sprawdzić parzystość dowolnej liczby bez zmiany wartości wyniku. Aby to zrobić, musisz wykonać polecenie XOR z wartością zerową. Oznacza to, że ODBIORNIK musi zawierać testowaną liczbę, a ŹRÓDŁO musi zawierać zero. A następnie musisz sprawdzić flagę parzystości. Przykład:

AL, 10110101b ;Umieść w AL liczbę nieparzystą;liczba jednobitową (5) XOR AL, 0 ;W tym przypadku flaga parzystości PF nie jest;ustaw (PO) MOV AL, 10110111b ;Umieść w AL liczbę o parzystej;liczbie jednobitowej (6 ) XOR AL, 0 ;W tym przypadku zostanie ustawiona flaga parzystości PF ;(PE)

W debuggerach skrót PE (Parity Even) jest zwykle używany do oznaczenia parzystej liczby jedynek w wynikowym wyniku, a PO (Parity Odd) w przypadku liczby nieparzystej.

Parzystość w słowach 16-bitowych

Jak już wspomniano, flaga parzystości jest ustawiana w zależności od liczby jedynek zawartych w młodszym bajcie wyniku. Aby sprawdzić parzystość 16-bitowego operandu, należy wykonać XOR starszy i młodszy bajt liczby:

MOV AX, 64C1h ;0110 0100 1100 0001 - 6 jednobitowych XOR AH, AL ;Flaga parzystości zostanie ustawiona

W ten prosty sposób 16-bitowy operand jest dzielony na dwa bajty (2 grupy po 8 bitów), a podczas wykonywania polecenia XOR jeden bit znajdujący się w odpowiednich bitach dwóch 8-bitowych operandów nie będzie brany pod uwagę konto. Ponieważ odpowiedni bit wyniku wynosi zero.

Instrukcja XOR usuwa z wyniku nakładające się jeden bit dwóch 8-bitowych operandów i dodaje do wyniku rozłączny jeden bit. Oznacza to, że parzystość otrzymanej liczby 8-bitowej będzie taka sama jak parzystość oryginalnej liczby 16-bitowej.

0110 0100 1100 0001 - oryginalna liczba 16-bitowa 0 XOR 1 = 1 1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 0 = 0 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 0 = 0 0 XOR 1 = 1

Wynik to 4 jednostki, czyli flaga PF zostanie ustawiona

Parzystość w 32-bitowych podwójnych słowach

A co, jeśli chcesz określić parzystość liczby 32-bitowej?

Następnie liczba jest dzielona na cztery bajty i na tych bajtach jeden po drugim wykonywana jest wyłączna operacja OR.

Na przykład podzieliliśmy liczbę 32-bitową B o cztery bajty B0, B1, B2, B3, Gdzie B0- to jest młodszy bajt.

Następnie, aby określić parzystość liczby B, będziemy musieli skorzystać z następującego wzoru:

B0 XOR B1 XOR B2 XOR B3

Ale w asemblerze taki zapis nie jest dozwolony. Więc będziesz musiał trochę pomyśleć.

I na koniec o pochodzeniu mnemoników XOR. W języku angielskim jest słowo e X recepcja - wyjątek. Skrótem tego słowa jest litera X(tak też się stało). Prawdopodobnie widziałeś to w reklamach lub w nazwach produktów, których producenci zapewniają (lub myślą, że twierdzą) wyłączność. Na przykład Lada XRAY, Sony XPeria itp. Zatem XOR jest akronimem złożonym z dwóch słów – np X przyjęcie LUB- wyłączne LUB.

Kontynuując temat:
Urządzenia

Lwowski Uniwersytet Narodowy im. I. Franko (LNU) - dodatkowe informacje o uczelni Informacje ogólne Lwowski Uniwersytet Narodowy im. Iwana...