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

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

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

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

Syntax

~ expression

Arguments

expression

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

Note

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

Типы возвращаемых данных

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

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

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

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

Remarks

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

Important

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

Examples

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

CREATE TABLE bitwise
(
    a_int_value INT NOT NULL,
    b_int_value INT NOT NULL
);
GO

INSERT bitwise
VALUES (170, 75);
GO

Следующий запрос выполняет побитовую операцию NOT по столбцам и b_int_value столбцамa_int_value.

SELECT ~a_int_value AS NotA,
       ~b_int_value AS NotB
FROM bitwise;

Вот результат.

NotA   NotB
-----  -----
-171   -76

Двоичное представление числа 170 (a_int_value или A) — 0000 0000 0000 0000 0000 0000 1010 1010. При выполнении побитовой NOT операции с этим значением создается двоичный результат 1111 1111 1111 1111 1111 1111 0101 0101, который имеет десятичное значение -171. Двоичное представление числа 75: 0000 0000 0000 0000 0000 0000 0100 1011. Выполнение побитовой NOT операции производится 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