Operator bitowy w programowaniu w C i C++

Opublikowany: 2022-12-09

W pamięci RAM dane są zorganizowane jako sekwencja bajtów. Każdy bajt zawiera osiem kolejnych bitów. Operatory bitowe C i C++ są pomocne, gdy chcesz wykonać pewne operacje arytmetyczne na bitach danych. Są dość szybsze i czasami są używane w celu zwiększenia wydajności programu. Działają na algorytmach bitowych, które wykonują operacje na poziomie bitów lub manipulują bitami na różne sposoby.

Typy operatorów bitowych w C i C++:

  1. Bitowe ORAZ
  2. Bitowe LUB
  3. Bitowo NIE
  4. Bitowe wyłączne-lub (XOR)
  5. Operator przesunięcia w lewo
  6. Operator prawego przesunięcia

Przejdźmy do szczegółów każdego z nich:

Spis treści

1. Bitowo ORAZ:

Bitowy operator AND w C lub C++ używa pojedynczego znaku ampersand (&). Przyjmuje dwie liczby jako operandy i wykonuje AND na wszystkich ich bitach. Wynikiem jest 1 tylko wtedy, gdy oba bity są równe 1. Jeśli którykolwiek z bitów ma wartość 0, wynikiem jest 0. Zasadniczo ten operator binarny w C i C++ przyjmuje logiczne AND bitów na każdej pozycji podanych dwóch liczb w postać binarna.

Przykład:

Załóżmy, że binarna reprezentacja dwóch liczb a i b to:

a = 01011000

b = 10111001

Zatem a i b = 00011000

Jak widać z powyższego przykładu, wynik pokazuje „1” tylko w tych miejscach, gdzie obie liczby a i b mają 1. We wszystkich innych miejscach wynik pokazuje „0”.

2. Bitowe LUB:

W C i C++ bitowe OR działa podobnie do bitowego ORAZ. Jedyna różnica polega na tym, że w bitowym operatorze OR, aby pozycja bitu w wyniku wynosiła „1”, tylko jeden z dwóch bitów powinien mieć wartość „1”. Ten operator przyjmuje dwie liczby jako operandy i wykonuje operację OR na każdym bicie tych dwóch liczb.

Działa to w następujący sposób:

  • Jeśli oba bity mają wartość „1”, wynikiem jest „1”.
  • Jeśli oba bity mają wartość „0”, wynikiem jest „0”.
  • Jeśli którykolwiek z bitów ma wartość „1”, wynikiem jest „1”.

Jest to jeden z najprostszych i najczęściej używanych operatorów bitowych C++. Jego symbolem jest rura |. Ponadto jest identyczny z boolowskim operatorem logicznym ||.

Przykład:

Załóżmy, że binarna reprezentacja dwóch liczb a| b jest:

za = 01101001

b = 10111000

Więc, a| b = 11111001

3. Bitowo NIE:

Znany również jako operator Bitwise NOT, odwraca każdy bit wyniku. Jej symbolem jest tylda (~). Łatwym sposobem zapamiętania działania tego operatora jest to, że tylda jest czasami nazywana twiddle, a bitowe uzupełnienie twiddles każdego bitu. Oznacza to, że jeśli masz 1, wynikiem jest 0 i odwrotnie. Innymi słowy, ten operator bitowy w C i C++ przyjmuje jedną liczbę i odwraca wszystkie bity.

Podczas określania największej możliwej wartości dla dowolnej liczby bez znaku, ten jest jednym z najbardziej użytecznych operatorów bitowych C++ .

Przykład:

liczba całkowita bez znaku = ~0;

Tutaj 0 oznacza same zera: 00000000. Tak więc implementacja operatora Bitwise NOT daje wynik jako 1s: 11111111. Ponieważ num jest liczbą całkowitą bez znaku, nie musisz się martwić o bity ze znakiem lub uzupełnienie do dwóch. 1s to największa możliwa liczba w wyniku.

Jedną z kluczowych cech operatora Bitwise NOT jest dopełnienie 2. Uzupełnienie liczby przez 2 jest równe uzupełnieniu tej liczby plus 1.

Przykład:

za = 00000000

Więc jego uzupełnienie do 2 = -(11111111+1) = -00000000 = -0(dziesiętnie)

Uwaga: Dopełnienie bitowe dowolnej liczby N równa się -(N+1).

Ucz się kursów programistycznych online z najlepszych światowych uniwersytetów. Zdobądź programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

4. Bitowe wyłączne LUB (XOR):

Operacja Exclusive-OR akceptuje dwa wejścia i wyprowadza 1, jeśli jedno lub drugie wejście jest równe 1. Ale wynikiem jest 0, jeśli oba są równe 1. Jeśli oba wejścia mają wartość 0 lub oba są równe 1, wynikiem jest 0. Wynik XOR wynosi 1 tylko wtedy, gdy dwa bity są różne. Symbolem tego operatora binarnego w C i C++ jest daszek (^). Co więcej, ten operator bitowy w C i C++ jest określany skrótem XOR. Wykonuje operację OR na zasadzie wyłączności na każdej parze bitów. Należy zauważyć, że nie ma odpowiednika tego operatora boolowskiego.

Przykład:

Załóżmy, że mamy dwie liczby as

a = 10101010

b = 01110010

Teraz a ^ b = 10101010 ^ 01110010 = 11011000

Możesz zrozumieć XOR w następujący sposób. Załóżmy, że masz jakiś bit, 0 lub 1, który nazywasz A. Teraz, kiedy weźmiesz A XOR 0, otrzymasz A z powrotem. Tak więc, jeśli A wynosi 1, otrzymujesz 1 i odwrotnie. Kiedy bierzesz A XOR 1, oznacza to, że odwracasz A. Więc jeśli A wynosi 1, otrzymujesz 0 i odwrotnie.

Jeśli dwukrotnie zaimplementujesz bitową operację XOR, tj. masz dwa bity, A i B, i ustawisz C = A XOR B, to wykonaj C XOR B. W takim przypadku otrzymasz wynik A XOR B XOR C. Albo odwraca każdy bit A dwa razy, albo nie odwraca żadnego bitu. W związku z tym po prostu otrzymujesz z powrotem literę A taką, jaka jest.

Możesz rozważyć binarną operację XOR jako rodzaj selektywnego twiddle. Jeśli zaimplementujesz XOR na dwóch liczbach, z których jedna to same jedynki, wynik jest równoważny twiddle.

5. Operator przesunięcia w lewo:

Ten operator bitowy przesuwa wszystkie bity w lewo o określoną liczbę określonych bitów. Pozycje bitów, które opróżnił operator przesunięcia w lewo, zostają wypełnione 0. Jego symbolem jest <<.

W C lub C++ działa to tak, że najpierw przyjmuje dwie liczby, przesuwa w lewo bity pierwszego operandu, a drugi operand wskazuje, o ile miejsc należy przesunąć liczbę.

Składnia:

a <<= 5

Oto przykładowy program C/C++ implementujący operator przesunięcia w lewo:

int main()

{

int a = 5;

a <<= 2;

liczba << „x : ” << x << koniec;

}

Wyjście: a = 20

Popularne kursy i artykuły na temat inżynierii oprogramowania

Popularne programy
Program wykonawczy PG w rozwoju oprogramowania - IIIT B Program certyfikatów Blockchain - PURDUE Program Certyfikatów Cyberbezpieczeństwa - PURDUE Magister informatyki - IIIT B
Inne popularne artykuły
Wynagrodzenie inżyniera chmury w USA 2021-22 Wynagrodzenie architekta rozwiązań AWS w USA Wynagrodzenie programisty backendu w USA Wynagrodzenie programisty front-end w USA
Wynagrodzenie programisty internetowego w USA Pytania do wywiadu ze Scrum Masterem w 2022 roku Jak rozpocząć karierę w cyberbezpieczeństwie w 2022 roku? Opcje kariery w USA dla studentów inżynierii

6. Operator przesunięcia w prawo:

Ten operator bitowy przesuwa wszystkie bity w prawo o określoną liczbę określonych bitów. Jego symbolem jest >>. W C lub C++ ten operator najpierw przyjmuje dwie liczby, przesuwa w prawo bity pierwszego operandu, a drugi operand określa wielkość przesunięcia liczby.

Składnia:

a >>= 5

Przykładowy program C/C++ implementujący prawy operator przesunięcia:

int main() {

int a = 5;

a >> = 2;

liczba << „x : ” << x << koniec;

}

Wyjście: a = 1

Popularne kursy i artykuły na temat inżynierii oprogramowania

Popularne programy
Program wykonawczy PG w rozwoju oprogramowania - IIIT B Program certyfikatów Blockchain - PURDUE Program Certyfikatów Cyberbezpieczeństwa - PURDUE Magister informatyki - IIIT B
Inne popularne artykuły
Wynagrodzenie inżyniera chmury w USA 2021-22 Wynagrodzenie architekta rozwiązań AWS w USA Wynagrodzenie programisty backendu w USA Wynagrodzenie programisty front-end w USA
Wynagrodzenie programisty internetowego w USA Pytania do wywiadu ze Scrum Masterem w 2022 roku Jak rozpocząć karierę w cyberbezpieczeństwie w 2022 roku? Opcje kariery w USA dla studentów inżynierii

Kiedy należy używać operatorów bitowych w C i C++?

  • Oszczędność miejsca:

Operatory bitowe pomagają zaoszczędzić miejsce. Jednym z częstych problemów napotykanych podczas pracy na poziomie poszczególnych bitów jest to, że jeśli chcesz mieć więcej miejsca lub zaoszczędzić czas, być może będziesz musiał przeprojektować ogromne części swojego programu. Ale użycie operatorów bitowych w C i C++ może wyeliminować zależności; na przykład możesz użyć ~0, aby uzyskać największą możliwą liczbę całkowitą. Typową operacją jest przesunięcie bitu w celu pomnożenia przez dwa. W związku z tym nie wpływa to na czytelność, w przeciwieństwie do zaawansowanego użycia manipulacji bitami, które może mieć wpływ w niektórych przypadkach.

  • Szyfrowanie:

Jeśli pracujesz nad jakimś rodzajem szyfrowania lub nad systemem, który wymaga użycia pól bitowych do przechowywania atrybutów boolowskich.

Unikalne fakty dotyczące operatorów bitowych

  • Bitowe OR dwóch liczb jest po prostu sumą tych liczb, jeśli nie ma mowy o przeniesieniu. W przeciwnym razie wystarczy dodać ich bitowe AND. Załóżmy na przykład, że x = 5(101) i y = 2(010). Ponieważ w grę nie wchodzi przeniesienie, suma wynosi po prostu x|y. Ale jeśli teraz zmienimy „x” na 6 (110), suma zmieni się na x|y + x&y, ponieważ teraz w grę wchodzi przeniesienie.
  • Bitowy operator XOR jest najbardziej wartościowy z technicznego punktu widzenia wywiadu. Przykład jednego z problemów wywiadu z tym związanych został omówiony tutaj. „Dla danego zestawu liczb składającego się ze wszystkich elementów występujących parzystą liczbę razy z wyjątkiem jednej liczby, znajdź nieparzystą liczbę występującą”. Aby rozwiązać ten problem, musisz wykonać XOR na wszystkich liczbach.
  • Operatory bitowe przesunięcia w prawo i w lewo nie mogą być używane dla liczb ujemnych. Drugi operand, który określa liczbę przesunięć, zawiera liczbę ujemną, co prowadzi do niezdefiniowanego zachowania w C i C++. Na przykład wyniki zarówno 1 >>- 1, jak i 1 << -1 są niezdefiniowane.
  • Zachowanie jest nieokreślone, jeśli przesunięcie liczby przekracza pojemność liczby całkowitej. Na przykład 1 << 65 jest nieokreślone, jeśli liczby całkowite są przechowywane w formacie 64-bitowym.
  • Żadna operacja przesunięcia nie występuje, jeśli drugi operand (ten, który określa liczbę przesunięć) wynosi 0.

Rozpocznij swoją przygodę z informatyką dzięki UpGrad:

Jeśli chcesz dowiedzieć się szczegółowo o rozwoju frontendu (JavaScript, HTML, CSS), backendu (NoSQL-MongoDB) i mikrousługach, możesz kontynuować kurs Master of Science in Computer Science firmy UpGrad. Ten kurs, prowadzony przez IIIT Bangalore i LJMU Alumni Status, pomoże Ci rozpocząć karierę jako inżynier oprogramowania / programista full-stack z gigantami technologicznymi na całym świecie.

Kurs obejmuje bezpłatny dostęp do Career Transition Bootcamp dla początkujących programistów i programistów niezwiązanych z technologią. Na tym kursie nauczysz się ponad dziesięciu języków programowania i narzędzi, gruntownie przygotowując Cię do przejęcia złożonych ról w branży.

Jaki jest pożytek z operatorów bitowych w C++?

W języku C++ operatory bitowe wykonują operacje na danych całkowitych na poziomie binarnym. Działają na wzorcach bitowych, które obejmują manipulację poszczególnymi bitami. Dlatego operacja bitowa jest również znana jako programowanie na poziomie bitów. Operatory bitowe w C++ są używane przede wszystkim do szybszych obliczeń, ponieważ działają tylko na dwóch cyfrach, tj. 0 i 1. Operatory te mogą również przeprowadzać testy i przesuwać rzeczywiste bity.

Czy możesz używać operatorów przesunięcia w lewo i w prawo razem w kodzie?

Tak, możesz łączyć operatory przesunięcia w lewo i przesunięcia w prawo, a następnie wyodrębnić dane z wyrażenia całkowitoliczbowego.

Czy operator komplementarny odwraca całą sekwencję kodu?

Nie, tak nie jest. Odwraca 1s i 0s. Tak więc wszystkie 1 stają się 0 i odwrotnie.

Dlaczego inna nazwa operatora dopełnienia Bitwise to operator dopełnienia?

Powodem jest to, że zawsze przyjmuje tylko jeden operand lub wartość. Jest to operator jednoargumentowy. Kiedy wykonujesz uzupełnienie na dowolnych bitach, wszystkie zera stają się jedynkami i odwrotnie. Na przykład, jeśli masz wyrażenie całkowite o wartości 1111 0000. Po wykonaniu operacji dopełnienia bitowego wartość wynosi 0000 1111.