~ (побитовое НЕ)

Описание

Оператор побитового НЕ в 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.

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

Смотрите также