~ (Побитовое отрицание (НЕ))

Побитовый оператор 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.

Иногда знаковый бит в целочисленном выражении со знаком может вызывать нежелательные проблемы.