다음을 통해 공유


~(비트 NOT)(Transact-SQL)

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

적용 대상: SQL Server(SQL Server 2008 - current version), Windows Azure SQL 데이터베이스(최초 릴리스 - 현재 릴리스)

항목 링크 아이콘 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에 해당되는 이진 결과 1111 1111 0101 0101이 생성됩니다. 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

참고 항목

참조

식(Transact-SQL)

연산자(Transact-SQL)

비트 연산자(Transact-SQL)