다음을 통해 공유


~(비트 NOT)(Transact-SQL)

정수 값에 비트 논리 NOT 연산을 수행합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

~ expression

인수

  • expression
    정수 데이터 형식 범주에 속하는 데이터 형식, bit, binary 또는 varbinary 데이터 형식 중 하나인 유효한 입니다. expression은 비트 연산에서 이진 숫자로 취급됩니다.

    [!참고]

    비트 연산에서는 하나의 expression만 binary 또는 varbinary 데이터 형식이 될 수 있습니다.

결과 형식

입력 값이 int인 경우 int

입력 값이 smallint인 경우 smallint

입력 값이 tinyint인 경우 tinyint

입력 값이 bit인 경우 bit

주의

~ 비트 연산자는 각 비트를 차례로 취하여 expression에 대해 비트 논리 NOT을 수행합니다. expression 값이 0이면 결과 집합의 비트는 1로 설정되며 0이 아니면 결과 비트는 값 0으로 지워집니다. 즉, 1은 0으로 변경되고 0은 1로 변경됩니다.

중요 정보중요

비트 연산을 수행할 때는 연산에 사용되는 식의 저장 길이가 중요합니다. 값을 저장할 때는 동일한 바이트 수를 사용하는 것이 좋습니다. 예를 들어 10진수 값 5를 tinyint, smallint 또는 int로 저장하면 바이트 수가 다르게 저장된 값이 생성됩니다. 데이터를 저장할 때 tinyint는 1바이트, smallint는 2바이트, int는 4바이트를 사용하여 저장합니다. 따라서 int 10진수 값에 비트 연산을 수행하면 직접 이진 또는 16진수 변환을 사용하는 것과 다른 결과가 생성될 수 있습니다. 특히 ~(비트 NOT) 연산자를 사용하는 경우 그렇습니다. 비트 NOT 연산은 길이가 짧은 변수에서 발생할 수 있습니다. 이 경우 길이가 짧은 변수를 길이가 긴 데이터 형식 변수로 변환할 때 상위 8비트는 예상된 값으로 설정되지 않을 수 있습니다. 작은 데이터 형식 변수를 큰 데이터 형식 변수로 변환한 다음 그 결과에서 NOT 연산을 수행하는 것이 좋습니다.

다음 예에서는 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 열에 비트 NOT 연산을 수행합니다.

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입니다. 이 값에 대해 비트 NOT 연산을 수행하면 10진수 -171에 해당되는 이진 결과 0000 0000 1110 1011이 생성됩니다. 75의 이진 표현은 0000 0000 0100 1011입니다. 비트 NOT 연산을 수행하면 1111 1111 1011 0100(10진수 -76)이 생성됩니다.

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