bitwise operation (tsz. bitwise operations)
A bitműveletek (bitwise operations) a C++ nyelvben lehetővé teszik, hogy közvetlenül a számok bináris bitjein végezzünk műveleteket. Ezek különösen hasznosak, ha alacsony szintű optimalizálásra, hardverprogramozásra vagy egyedi adattárolásra van szükség.
Operátor | Név | Leírás |
---|---|---|
&
|
Bitwise AND | Mindkét bitnek 1-nek kell lennie az eredményben. |
|
|
Bitwise OR | Ha legalább az egyik bit 1, akkor az eredmény is 1. |
^
|
Bitwise XOR | Ha a bitek különböznek, akkor az eredmény 1, különben 0. |
~
|
Bitwise NOT | Az összes bitet megfordítja (1 → 0, 0 → 1). |
<<
|
Balra tolás (Left Shift) | Az összes bitet balra tolja, és nullákkal tölti fel a helyet. |
>>
|
Jobbra tolás (Right Shift) | Az összes bitet jobbra tolja. |
&
)Két szám bitenkénti ÉS művelete:
#include <iostream>
int main() {
int a = 5; // 0101 binárisan
int b = 3; // 0011 binárisan
int c = a & b;
std::cout << c << std::endl; // Kiírja: 1
return 0;
}
Művelet lebontása:
0101 (5) & 0011 (3) ----------- 0001 (1)
|
)Ha bármelyik bit 1, akkor az eredmény is 1.
int c = 5 | 3; // 7 lesz az eredmény
0101 (5) | 0011 (3) ----------- 0111 (7)
^
)Ha a bitek különböznek, az eredmény 1, különben 0.
int c = 5 ^ 3; // 6 lesz az eredmény
0101 (5) ^ 0011 (3) ----------- 0110 (6)
~
)Minden bitet megfordít. Figyelem: C++-ban a számokat kétkomplementes ábrázolásban tároljuk.
int c = ~5;
Binárisan:
~00000101 (5) ------------ 11111010 (-6)
<<
)Minden bitet balra tolunk, és a jobb oldalt nullákkal töltjük ki.
int c = 5 << 1; // 10 lesz az eredmény
0101 (5) << 1 ------------ 1010 (10)
Minden balra tolás megduplázza a számot.
>>
)Minden bitet jobbra tolunk, a bal oldali bitek attól függően töltődnek fel, hogy az adott szám előjeles vagy előjel nélküli.
int c = 5 >> 1; // 2 lesz az eredmény
0101 (5) >> 1 ------------ 0010 (2)
Minden jobbra tolás felezi a számot.
x << 1
ugyanaz, mint x * 2
, és x >> 1
ugyanaz, mint x / 2
.
A bitműveletek hatékony eszközei a C++ nyelvnek, és megfelelő alkalmazásukkal gyorsabb és optimalizáltabb kódot írhatunk!