Шановні друзі! Сайт знаходиться в процесі перекладу на солов'їну мову. Все буде Україна!

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

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

0 1 operand1

---------- 
1 0 ~ operand1

int a = 103; // в двоичной системе: 0000000001100111 
int b = ~a; // в двоичной системе: 1111111110011000 = -104

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

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

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