Krótki przegląd operatorów bitowych
Operator to symbol, który nakazuje kompilatorowi wykonanie pewnych operacji matematycznych lub logicznych. W C++ istnieje kilka typów operatorów, takich jak:
- Operatory arytmetyczne
- Operatory logiczne
- Operatorzy relacyjni
- Operatorzy przypisania
- Operatory bitowe
- Różni operatorzy
Wszystkie operatory Bitwise działają na poziomie pojedynczego bitu. Operator bitowy może być stosowany tylko do typów danych całkowitych i znakowych. Na przykład, jeśli masz zmienną typu integer o rozmiarze 32 bitów i zastosujesz operację bitową NOT, operator bitowy NOT zostanie zastosowany dla wszystkich 32 bitów. Tak więc ostatecznie wszystkie 32 bity w zmiennej zostaną odwrócone.
W C++ dostępnych jest sześć różnych operatorów bitowych:
- Bitowe OR [reprezentowane jako „|”]
- Bitowe AND [reprezentowane jako „&”]
- Bitowe NIE [reprezentowane jako „~”]
- Bitowe XOR [reprezentowane jako „^”]
- Bitowe przesunięcie w lewo [reprezentowane jako „<<”]
- Bitowe przesunięcie w prawo [reprezentowane jako „>>”]
Bitowa LUB Tabela Prawdy
Operator bitowego OR daje 1, gdy co najmniej jeden operand jest ustawiony na 1. Oto tabela prawdy dla operatora bitowego OR:
Bit-1 | Bit-2 | Bit-1 | Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Bitowa ORAZ Tabela Prawdy
Bitowy operator AND daje 1, gdy oba operandy są ustawione na 1. Oto tabela prawdy dla operatora bitowego AND:
Bit-1 | Bit-2 | Bit-1 i Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Bitowa NIE Tabela Prawdy
Bitowy operator NOT odwraca operand. Oto tabela prawdy dla operatora Bitwise NOT:
Bit-1 | ~Bit-1 |
---|---|
0 | 1 |
1 | 0 |
Bitowa tabela prawdy XOR
Bitowy operator XOR daje 1 wtedy i tylko wtedy, gdy jeden z operandów jest ustawiony na 1. Oto tabela prawdy dla operatora bitowego AND:
Bit-1 | Bit-2 | Bit-1 ^ Bit-2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Bitowy operator przesunięcia w lewo
Operator Bitwise Left Shift przesuwa wszystkie pozostałe bity o określoną liczbę określonych bitów. Jeśli w lewo przesuniesz wszystkie bity danych o 1, oryginalne dane zostaną pomnożone przez 2. Podobnie, jeśli w lewo przesuniesz wszystkie bity danych o 2, oryginalne dane zostaną pomnożone przez 4.
Bitowy operator przesunięcia w prawo
Operator Bitwise Right Shift przesuwa wszystkie bity w prawo o określoną liczbę określonych bitów. Jeśli przesuniesz w prawo wszystkie bity danych o 1, oryginalne dane zostaną podzielone (dzielenie liczb całkowitych) przez 2. Podobnie, jeśli przesuniesz w prawo wszystkie bity danych o 2, oryginalne dane zostaną podzielone (dzielenie liczb całkowitych) przez 4.
Przykłady
Teraz, ponieważ zrozumieliśmy podstawową koncepcję operacji bitowych, przyjrzyjmy się kilku przykładom, które pomogą Ci zrozumieć operacje bitowe w C++:
- Przykład-1: Bitowy operator OR
- Przykład-2: Bitowy operator AND
- Przykład-3: Bitowy operator NOT
- Przykład-4: Bitowy operator XOR
- Przykład-5: Bitowy operator przesunięcia w lewo
- Przykład-6: Bitowy operator przesunięcia w prawo
- Przykład-7: Ustaw bit
- Przykład-8: Wyczyść bit
Przykłady 7 i 8 służą do zademonstrowania rzeczywistego użycia operatorów bitowych w języku programowania C++.
Przykład-1: Bitowy operator OR
W tym przykładowym programie zademonstrujemy operator bitowego OR.
#zawierać#zawierać
#zawierać
przy użyciu standardowej przestrzeni nazw;
// funkcja wyświetlania()
void display(string print_msg, int number)
bitset<16> mójBitSet(liczba);
Cout << print_msg;
Cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main()
int pierwsza_num = 7, druga_num = 9, wynik = 0;
// Bitowa operacja OR OR
wynik = pierwsza_liczba | druga_liczba;
// drukuj liczby wejściowe
Cout << endl;
display("Pierwszy numer to = ”, first_num);
display("Drugi numer to = ", second_num);
// drukuj wartość wyjściową
display("pierwszy_num | drugi_num = ", wynik);
Cout << endl;
zwróć 0;
Przykład-2: Bitowy operator AND
W tym przykładowym programie zilustrujemy bitowy operator AND.
#zawierać#zawierać
#zawierać
przy użyciu standardowej przestrzeni nazw;
// funkcja wyświetlania()
void display(string print_msg, int number)
bitset<16> myBitSet(liczba);
Cout << print_msg;
Cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main()
int pierwsza_num = 7, druga_num = 9, wynik = 0;
// Bitowa operacja AND
wynik = pierwszy_num & drugi_num;
// drukuj liczby wejściowe
Cout << endl;
display("Pierwszy numer to = ”, first_num);
splay("Druga liczba to = ", second_num);
// drukuj wartość wyjściową
display("pierwsza_numer i druga_numer = ", wynik);
Cout << endl;
zwróć 0;
Przykład-3: Bitowy operator NOT
W tym przykładowym programie zrozumiemy, jak działa operator Bitwise NOT w C++.
#zawierać#zawierać
#zawierać
przy użyciu standardowej przestrzeni nazw;
// funkcja wyświetlania()
void display(string print_msg, int number)
bitset<16> myBitSet(liczba);
Cout << print_msg;
Cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main()
int pierwsza_num = 7, druga_num = 9, wynik_1 = 0, wynik_2 = 0;
// Bitowa operacja NOT
wynik_1 = ~pierwsza_liczba;
wynik_2 = ~druga_liczba;
// drukuj liczby wejściowe i wartość wyjściową
Cout << endl;
display("Pierwszy numer to = ”, first_num);
display("~first_num = ”, wynik_1);
Cout << endl;
// drukuj liczby wejściowe i wartość wyjściową
display("Druga liczba to = ”, druga_liczba);
display("~second_num = ”, wynik_2);
Cout << endl;
zwróć 0;
Przykład-4: Bitowy operator XOR
Ten program ma na celu wyjaśnienie, jak działa operator Bitwise XOR w C++.
#zawierać#zawierać
#zawierać
przy użyciu standardowej przestrzeni nazw;
// funkcja wyświetlania()
void display(string print_msg, int number)
bitset<16> mójBitSet(liczba);
Cout << print_msg;
Cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main()
int pierwsza_num = 7, druga_num = 9, wynik = 0;
// Bitowa operacja XOR
wynik = pierwsza_liczba ^ druga_liczba;
// drukuj liczby wejściowe
Cout << endl;
display("Pierwszy numer to = ”, first_num);
display("Drugi numer to = ", second_num);
// drukuj wartość wyjściową
display("pierwsza_numer ^ druga_numer = ", wynik);
Cout << endl;
zwróć 0;
Przykład-5: Bitowy operator przesunięcia w lewo
Teraz zobaczymy przykład operatora Bitwise Left Shift. W tym programie zadeklarowaliśmy dwie liczby, first_num i second_num typu integer. Tutaj „first_num” jest przesunięte w lewo o jeden bit, a „second_num” jest przesunięte w lewo o dwa bity.
#zawierać#zawierać
#zawierać
przy użyciu standardowej przestrzeni nazw;
// funkcja wyświetlania()
void display(string print_msg, int number)
bitset<16> myBitSet(liczba);
Cout << print_msg;
Cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main()
int pierwsza_num = 7, druga_num = 9, wynik_1 = 0, wynik_2 = 0;
// Operacja bitowego przesunięcia w lewo
wynik_1 = pierwsza_liczba << 1;
wynik_2 = druga_liczba << 2;
// drukuj liczby wejściowe i wartość wyjściową
Cout << endl;
display("Pierwszy numer to = ”, first_num);
display("pierwszy_numer << 1 = ", result_1);
Cout << endl;
// drukuj liczby wejściowe i wartość wyjściową
display("Druga liczba to = ”, druga_liczba);
display("druga_liczba << 2 = ", result_2);
Cout << endl;
zwróć 0;
Przykład-6: Bitowy operator przesunięcia w prawo
Teraz zobaczymy kolejny przykład, aby zrozumieć operator Bitwise Right Shift. Zadeklarowaliśmy dwie liczby, first_num i second_num typu integer. Tutaj „first_num” jest przesunięte w prawo o jeden bit, a „second_num” jest przesunięte w prawo o dwa bity.
#zawierać#zawierać
#zawierać
przy użyciu standardowej przestrzeni nazw;
// funkcja wyświetlania()
void display(string print_msg, int number)
bitset<16> mójBitSet(liczba);
Cout << print_msg;
Cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main()
int pierwsza_num = 7, druga_num = 9, wynik_1 = 0, wynik_2 = 0;
// Operacja bitowego przesunięcia w prawo
wynik_1 = pierwsza_liczba >> 1;
wynik_2 = druga_liczba >> 2;
// drukuj liczby wejściowe i wartość wyjściową
Cout << endl;
display("Pierwszy numer to = ”, first_num);
display("pierwsza_liczba >> 1 = ", wynik_1);
Cout << endl;
// drukuj liczby wejściowe i wartość wyjściową
display("Druga liczba to = ”, druga_liczba);
display("druga_liczba >> 2 = ", wynik_2);
Cout << endl;
zwróć 0;
Przykład-7: Ustaw bit
Ten przykład ma na celu pokazanie, jak ustawić określony bit za pomocą operatorów bitowych.
#zawierać#zawierać
#zawierać
przy użyciu standardowej przestrzeni nazw;
// funkcja wyświetlania()
void display(string print_msg, int number)
bitset<16> mójBitSet(liczba);
Cout << print_msg;
Cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main()
int pierwsza_num = 7, druga_num = 9;
// wypisz liczbę wejściową - first_num
Cout << endl;
display("Pierwszy numer to = ", first_num);
// Ustaw piąty bit
pierwsza_liczba |= (1UL << 5);
// Wydrukuj wyjście
display("Ustaw piąty bit pierwszego_numeru = ", pierwszy_numer);
Cout << endl;
// wypisz liczbę wejściową - second_num
Cout << endl;
display("Druga liczba to = ", second_num);// Ustaw szósty bit
druga_liczba |= (1UL << 6);
// Wydrukuj wyjście
display("Ustaw szósty bit drugiego_num = ", drugi_num);
Cout << endl;
zwróć 0;
Przykład-8: Wyczyść bit
Ten przykład ma na celu pokazanie, jak wyczyścić określony bit za pomocą operatorów bitowych.
#zawierać#zawierać
#zawierać
przy użyciu standardowej przestrzeni nazw;
// funkcja wyświetlania()
void display(string print_msg, int number)
bitset<16> mójBitSet(liczba);
Cout << print_msg;
Cout << myBitSet.to_string() << " (" << myBitSet.to_ulong() << ") " << endl;
int main()
int pierwsza_num = 7, druga_num = 9;
// wypisz liczbę wejściową - first_num
Cout << endl;
display("Pierwszy numer to = ", first_num);
// Wyczyść drugi bit
pierwszy_numer &= ~(1UL << 2);
// Wydrukuj wyjście
display("Ustaw drugi bit pierwszego_numeru = ", pierwszy_numer);
Cout << endl;
// wypisz liczbę wejściową - second_num
Cout << endl;
display("Drugi numer to = ", second_num);
// Wyczyść trzeci bit
drugi_numer &= ~(1UL << 3);
// Wydrukuj wyjście
display("Ustaw trzeci bit drugiego_num = ”, drugi_num);
Cout << endl;
zwróć 0;
Wniosek
Operator bitowy służy przede wszystkim do manipulowania poszczególnymi bitami dla danych typu całkowitego i znakowego. Operator bitowy jest często używany w tworzeniu oprogramowania wbudowanego. Tak więc, jeśli opracowujesz sterownik urządzenia lub system bardzo zbliżony do poziomu sprzętowego, możesz użyć tych operatorów bitowych.