bitwise NOT (tsz. bitwise NOTs)
~
) 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.
~
)?A ~
operátor az összes bitet megfordítja.
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.
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.
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 |
-(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
Ha egy bitmaskot szeretnénk egy adott méretben létrehozni:
int mask = ~0; // Minden bit 1 lesz (0xFFFFFFFF)
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)
~
operátor minden bitet megfordít.unsigned int
) számoknál az összes bit 1-ről 0-ra és fordítva változik.signed int
) számoknál a kétkomplementes ábrázolás miatt az eredmény -(x+1)
.🔥 Ha előjeles számokon dolgozol, mindig számolj a kétkomplementes ábrázolás hatásaival! 🚀