bitwise AND (tsz. bitwise ANDs)
A bitwise AND az egyes biteket párhuzamosan dolgozza fel. Nézzünk egy példát:
#include <iostream>
int main() {
int a = 5; // 0101 binárisan
int b = 3; // 0011 binárisan
int eredmeny = a & b; // 0001 binárisan, ami decimálisan 1
std::cout << "Eredmény: " << eredmeny << std::endl; // Kiírja: Eredmény: 1
return 0;
}
Magyarázat:
0101 (5 decimálisan) & 0011 (3 decimálisan) ---- 0001 (1 decimálisan)
Csak ott marad 1, ahol mindkét szám bitje 1 volt.
A bitenkénti ÉS operátor számos felhasználási területtel rendelkezik:
Egy szám páros-e vagy páratlan, azt a & 1 művelettel gyorsan megállapíthatjuk:
int x = 6;
if (x & 1) {
std::cout << "A szám páratlan\n";
} else {
std::cout << "A szám páros\n";
}
Itt: - 6 & 1 → 0110 & 0001 → 0000 (páros) - 7 & 1 → 0111 & 0001 → 0001 (páratlan)
A bitwise AND gyakran használatos bitmaszkokkal egy adott bitcsoport kiválasztására:
int flags = 0b10101100; // Binárisan: 10101100
int mask = 0b00000100; // Binárisan: 00000100
if (flags & mask) {
std::cout << "A bit be van állítva!" << std::endl;
}
Itt az & mask segítségével ellenőrizzük, hogy a 3. bit 1-e.
Ha két szám bitmezőként van tárolva, akkor a bitwise AND megmutathatja a közös tulajdonságokat:
int jogosultsag1 = 0b1101; // 13 decimálisan
int jogosultsag2 = 0b1011; // 11 decimálisan
int metszet = jogosultsag1 & jogosultsag2;
std::cout << "Közös jogosultságok: " << metszet << std::endl;
Eredmény:
1101 & 1011 ---- 1001 (9 decimálisan)
A közös jogosultságok binárisan 1001.
A bitwise AND nagyon gyors művelet, mert közvetlenül a processzor végzi egyetlen órajelciklus alatt. Gyakran alkalmazzák: - Gyors számításokra (például maradékosztás helyett) - Játékmotorokban és grafikai programozásban - Hardverközeli programozásban (pl. beágyazott rendszerek)
Ha egy szám hatványa a kettőnek, akkor csak egyetlen 1 bitje van beállítva. Ezt így ellenőrizhetjük:
bool isPowerOfTwo(int n) {
return (n > 0) && ((n & (n - 1)) == 0);
}
Ez a trükkös megoldás minden 2 hatványánál 0-t ad vissza, mert például:
1000 (8 decimálisan) & 0111 (7 decimálisan) ---- 0000
A bitművelet tehát gyorsabb, mint egy ciklusos ellenőrzés!
Ha mélyebben érdekel a téma, érdemes megismerkedni más bitműveletekkel is, például a bitwise OR (|), bitwise XOR (^) és a bit shift (<<, >>) operátorokkal!