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


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

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

Значок ссылки на разделСоглашения о синтаксисе в Transact-SQL

Синтаксис

~ expression

Аргументы

  • 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 для сохранения значений, и два значения вставляются в одну строку.

USE tempdb;
GO
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME = 'bitwise')
DROP TABLE bitwise;
GO
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.

USE tempdb;
GO
SELECT ~ a_int_value, ~ b_int_value
FROM bitwise;

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

--- --- 
-171  -76 

(1 row(s) affected)

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

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