Побитовый оператор NOT в C++ обозначается символом тильды ~. В отличие от & и |, побитовый оператор НЕ применяется к одному операнду справа от него. Побитовое отрицание меняет каждый бит на противоположный: 0 становится 1, а 1 становится 0.
Другими словами:
0 1 операнд1
----
1 0 ~ операнд1
Пример кода
int a = 103; // в двоичной: 0000000001100111 int b = ~a; // в двоичной: 1111111110011000 = -104
Вы можете быть удивлены, увидев в результате этой операции отрицательное число, например -104. Это связано с тем, что старший бит в переменной int является так называемым знаковым битом. Если старший бит равен 1, число интерпретируется как отрицательное. Эта кодировка положительных и отрицательных чисел называется дополнением к двум.
Кроме того, интересно отметить, что для любого целого числа x его инверсия ~ x совпадает с -x - 1.
Иногда знаковый бит в целочисленном выражении со знаком может вызывать нежелательные проблемы.