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


~ (побитовое НЕ) (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

См. также

Справочник

Выражения (Transact-SQL)

Операторы (Transact-SQL)

побитовые операторы (Transact-SQL)