Поделиться через


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

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в базе данных Microsoft Fabric SQL в Microsoft Fabric

Выполняет побитовую логическую операцию НЕ с целочисленным значением.

Соглашения о синтаксисе Transact-SQL

Синтаксис

~ expression  

Аргументы

выражение
Любое допустимое выражение любого типа данных из категории целочисленных типов или bit либо типов данных binary или varbinary. expression трактуется как двоичное числовое значение для выполнения побитовой операции.

Примечание.

В побитовой операции только одно выражение expression может иметь тип binary или varbinary.

Типы результата

int, если входные значения имеют тип int.

smallint, если входные значения имеют тип smallint.

tinyint, если входные значения имеют тип tinyint.

bit, если входные значения имеют тип bit.

Замечания

Побитовый оператор ~ выполняет побитовую логическую операцию НЕ для аргумента expression, обрабатывая последовательно каждый бит. Если аргумент expression имеет значение 0, то биты в результирующем наборе принимают значение 1. В противном случае бит в результате принимает значение 0. Другими словами, единицы меняются на нули, нули меняются на единицы.

Внимание

При выполнении любого вида побитовой операции важна длина хранимого выражения, используемого в операции. Рекомендуется использование такого же количества битов при сохранении значений. Например, при сохранении десятичного значения 5 как tinyint, smallint или int получаются значения, занимающие различное количество байтов при хранении: значения типа tinyint занимают 1, smallint — 2, а int — 4 байта. Таким образом, при выполнении побитовой операции для десятичного представления числа типа int могут быть получены результаты, отличные от результатов, полученных для двоичного или шестнадцатеричного представления этого числа, особенно при использовании оператора ~ (побитового НЕ). Побитовую операцию «НЕ» можно провести для более короткой переменной. В случае, когда переменная более короткого типа данных преобразуется в переменную более длинного типа данных, старшие 8 бит могут принять неожиданное значение. Рекомендуется явно преобразовать переменные более короткого типа данных в переменные более длинного типа, а затем выполнять операцию «НЕ».

Примеры

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

CREATE TABLE bitwise (  
  a_int_value INT NOT NULL,  
  b_int_value INT NOT NULL); 
GO  
INSERT bitwise VALUES (170, 75);  
GO  

В следующем запросе выполняется побитовая операция «НЕ» для столбцов a_int_value и b_int_value.

SELECT ~ a_int_value, ~ b_int_value  
FROM bitwise;  

Результирующий набор:

--- ---   
-171  -76   
  
(1 row(s) affected)  

Двоичное представление числа 170 (a_int_value или A) — 0000 0000 0000 0000 0000 0000 1010 1010. Выполнение побитовой операции НЕ для этого значения дает двоичный результат 1111 1111 1111 1111 1111 1111 0101 0101, который является десятичным числом –171. Двоичное представление числа 75: 0000 0000 0000 0000 0000 0000 0100 1011. Выполнение побитовой операции «НЕ» дает результат 1111 1111 1111 1111 1111 1111 1011 0100, который является десятичным числом -76.

 (~A)     
         0000 0000 0000 0000 0000 0000 1010 1010  
         ---------------------------------------  
         1111 1111 1111 1111 1111 1111 0101 0101  
(~B)     
         0000 0000 0000 0000 0000 0000 0100 1011  
         ---------------------------------------  
         1111 1111 1111 1111 1111 1111 1011 0100  

См. также

Выражения (Transact-SQL)
Операторы (Transact-SQL)
Побитовые операторы (Transact-SQL)