bitwise NOT
Főnév
bitwise NOT (tsz. bitwise NOTs)
- (informatika) A bitwise NOT (
~) egy unáris operátor, amely minden egyes bitet megfordít egy szám bináris ábrázolásában.
🔹 0 → 1 lesz
🔹 1 → 0 lesz
Ez a művelet úgy is ismert, mint bitenkénti negálás vagy bitenkénti komplementer.
Hogyan működik a bitwise NOT (~)?
A ~ operátor az összes bitet megfordítja.
Példa pozitív számmal (előjel nélküli unsigned int):
#include <iostream>
int main() {
unsigned int a = 5; // 00000101 binárisan
unsigned int b = ~a; // Bitenkénti negálás
std::cout << b << std::endl;
return 0;
}
Lépésenkénti lebontás:
00000101 (5 decimálisan) ~ 11111010 (250 decimálisan, ha 8 bites rendszerben nézzük)
Mivel az unsigned int nem használ előjelet, az eredmény egy pozitív szám lesz.
Figyelem: Kétkomplementes ábrázolás és előjeles számok (signed int)
A C++ előjeles egész számokat kétkomplementes ábrázolásban tárolja, ami azt jelenti, hogy a ~ operátor az előjeles számokat negatívvá teszi.
Példa előjeles számmal (signed int):
#include <iostream>
int main() {
int a = 5; // 00000101 binárisan (32 biten: 00000000 00000000 00000000 00000101)
int b = ~a; // Bitenkénti negálás
std::cout << b << std::endl;
return 0;
}
Lépésenkénti lebontás (32 biten):
00000000 00000000 00000000 00000101 (5 decimálisan) ~ 11111111 11111111 11111111 11111010 (-6 decimálisan kétkomplementes formában)
📌 Fontos!
Az eredmény nem -5, hanem -6, mert a kétkomplementes ábrázolás miatt ~x ugyanaz, mint -(x+1).
Matematikailag:
~x = - (x + 1)
🔹 Példák: | Szám (x) | Binárisan (8 bit) | ~x binárisan | Eredmény (~x decimálisan) | |————|——————–|—————-|—————————–| | 5 | 00000101 | 11111010 | -6 | | 0 | 00000000 | 11111111 | -1 | | -5 | 11111011 | 00000100 | 4 |
Hol használjuk a bitwise NOT operátort?
1️⃣ Gyors előjeles szám váltás (-(x+1))
Ha szeretnénk gyorsan egy szám negált verzióját előállítani:
int x = 5;
int y = ~x; // Eredmény: -6
2️⃣ Bitmask készítése
Ha egy bitmaskot szeretnénk egy adott méretben létrehozni:
int mask = ~0; // Minden bit 1 lesz (0xFFFFFFFF)
3️⃣ Gyors bináris műveletek
Például egy logikai negálás (NOT) helyett:
bool flag = true;
bool invertedFlag = !flag; // Hagyományos negálás (jobb olvashatóság miatt ajánlott)
int bitwiseInvertedFlag = ~flag; // Bitwise NOT (bitenként)
Összegzés
- A
~operátor minden bitet megfordít. - Előjel nélküli (
unsigned int) számoknál az összes bit 1-ről 0-ra és fordítva változik. - Előjeles (
signed int) számoknál a kétkomplementes ábrázolás miatt az eredmény-(x+1). - Hasznos bitmaskokhoz, logikai műveletekhez, és gyors számításokhoz.
🔥 Ha előjeles számokon dolgozol, mindig számolj a kétkomplementes ábrázolás hatásaival! 🚀
- bitwise NOT - Szótár.net (en-hu)
- bitwise NOT - Sztaki (en-hu)
- bitwise NOT - Merriam–Webster
- bitwise NOT - Cambridge
- bitwise NOT - WordNet
- bitwise NOT - Яндекс (en-ru)
- bitwise NOT - Google (en-hu)
- bitwise NOT - Wikidata
- bitwise NOT - Wikipédia (angol)