Arduino:Справочник языка Arduino/Побитовые операторы/Побитовый оператор NOT(~)

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Побитовый оператор NOT (~)[1]

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

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

Или более наглядный пример:

int a = 103;    // в бинарном виде:  0000000001100111
int b = ~a;     // в бинарном виде:  1111111110011000 = -104

Удивляет, что в результате может получиться отрицательное число (вроде «-104»)? Дело в том, что самый первый бит в этой целочисленной переменной — это так называемый «знаковый бит». Если он равен «1», число интерпретируется как отрицательное. Метод кодирования положительных и отрицательных чисел называют «дополнительным кодом», более подробно о нем можно прочесть, например, числа) в Википедии.

Попутно стоит отметить, что для любого целого «x», «~x» будет то же самое, что и «-x-1».

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

См.также

Внешние ссылки