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