다음을 통해 공유


>> 연산자(Visual Basic)

비트 패턴에 산술 오른쪽 시프트를 수행합니다.

구문

result = pattern >> amount  

부분

result
필수입니다. 정수 숫자 값입니다. 비트 패턴을 시프트한 결과입니다. 데이터 형식은 pattern의 데이터 형식과 동일합니다.

pattern
필수입니다. 정수 숫자 식입니다. 시프트할 비트 패턴입니다. 데이터 형식은 정수 형식(SByte, Byte, Short, UShort, Integer, UInteger, Long 또는 ULong)이어야 합니다.

amount
필수입니다. 숫자 식입니다. 비트 패턴을 시프트할 비트 수입니다. 데이터 형식은 Integer거나 Integer로 확장되어야 합니다.

설명

산술 시프트는 원형이 아니므로 결과의 한쪽 끝에서 시프트된 비트가 다른 쪽 끝에서 다시 도입되지 않습니다. 산술 오른쪽 시프트에서는 가장 오른쪽 비트 위치를 넘어 시프트된 비트가 버려지고 가장 왼쪽(기호) 비트가 왼쪽에 비어 있는 비트 위치로 전파됩니다. 즉, pattern이 음수 값을 갖는 경우 비워진 위치는 1로 설정되고 그렇지 않으면 0으로 설정됩니다.

데이터 형식Byte, UShort, UInteger, ULong은 부호가 없으므로 전파할 부호 비트가 없습니다. pattern이 부호 없는 형식인 경우 비워진 위치는 항상 0으로 설정됩니다.

Visual Basic은 결과에서 보유할 수 있는 것보다 많은 비트로 시프트하는 것을 방지하기 위해 pattern의 데이터 형식에 해당하는 크기 마스크를 사용하여 amount의 값을 마스크합니다. 이러한 값의 이진 AND는 시프트 양에 사용됩니다. 크기 마스크는 다음과 같습니다.

pattern의 데이터 형식 크기 마스크(10진수) 크기 마스크(16진수)
SByte, Byte 7 &H00000007
Short, UShort 15 &H0000000F
Integer, UInteger 31 &H0000001F
Long, ULong 63 &H0000003F

amount가 0이면 result의 값이 pattern의 값과 동일합니다. amount가 음수이면 부호 없는 값으로 사용되며 적절한 크기 마스크로 마스크됩니다.

산술 시프트는 오버플로 예외를 생성하지 않습니다.

오버로딩

>> 연산자는 오버로드될 수 있습니다. 즉, 피연산자가 해당 클래스 또는 구조체 형식을 가질 때 클래스 또는 구조체의 동작을 재정의할 수 있습니다. 코드에서 이러한 클래스나 구조체에 대해 이 연산자를 사용하는 경우 재정의된 동작을 이해해야 합니다. 자세한 내용은 Operator Procedures을 참조하세요.

예시

다음 예제에서는 >> 연산자를 사용하여 정수 값에 대한 산술 오른쪽 시프트를 수행합니다. 결과는 항상 시프트되는 식의 데이터 형식과 동일합니다.

Dim pattern As Short = 2560
' The bit pattern is 0000 1010 0000 0000.
Dim result1, result2, result3, result4, result5 As Short
result1 = pattern >> 0
result2 = pattern >> 4
result3 = pattern >> 10
result4 = pattern >> 18
result5 = pattern >> -1

이전 예제의 결과는 다음과 같습니다.

  • result1은 2560(0000 1010 0000 0000).입니다.

  • result2는 160(0000 0000 1010 0000)입니다.

  • result3은 2(0000 0000 0000 0010)입니다.

  • result4는 640(0000 0010 1000 0000)입니다.

  • result5는 0입니다(오른쪽으로 15개 위치 시프트).

result4의 시프트 양은 18 AND 15로 계산되며 2와 같습니다.

다음 예제에서는 음수 값에 대한 산술 시프트를 보여 줍니다.

Dim negPattern As Short = -8192
' The bit pattern is 1110 0000 0000 0000.
Dim negResult1, negResult2 As Short
negResult1 = negPattern >> 4
negResult2 = negPattern >> 13

이전 예제의 결과는 다음과 같습니다.

  • negresult1은 -512(1111 1110 0000 0000)입니다.

  • negresult2는 -1입니다(부호 비트가 전파됨).

참고 항목