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

В C++ оператор побитового отрицания обозначается тильдой ~. Этот оператор, в отличие от & и |, употребляется применительно к одному операнду, который указывается после ~. Побитовое НЕ меняет каждый бит операнда на противоположный: 0 становится 1, а 1 становится 0. Например:

Вас может удивить, что результатом данной операции является отрицательное число -104. Это объясняется тем, что старший бит в переменной типа int является так называемым знаковым битом. Если старший бит 1, то число считается отрицательным. Такое представление положительных и отрицательных чисел принято называть дополнительным кодом. Более подробную информацию см. в статье Википедии «Дополнительный код».

Примечательно, что для любого целочисленного x, результатом операции ~x будет являться число (-x-1).

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