Visual Basic에서의 연산자 우선 순위

식에서 여러 작업이 발생하면 각 파트는 연산자 우선 순위라고 하는 미리 결정된 순서로 평가되고 확인됩니다.

우선 순위 규칙

식에 둘 이상의 범주의 연산자가 포함된 경우 다음 규칙에 따라 계산됩니다.

  • 산술 연산자와 연결 연산자는 다음 섹션에 설명된 우선 순위 순서를 가지며 모두 비교, 논리 및 비트 연산자보다 우선 순위가 더 큽니다.

  • 모든 비교 연산자는 동일한 우선 순위를 가지며 모두 논리 연산자 및 비트 연산자보다 우선 순위가 크지만 산술 연산자 및 연결 연산자보다 우선 순위가 낮습니다.

  • 논리 연산자와 비트 연산자는 다음 섹션에서 설명하는 우선 순위 순서를 가지며, 모두 산술, 연결 및 비교 연산자보다 우선 순위가 낮습니다.

  • 우선 순위가 같은 연산자는 식에 나타나는 순서대로 왼쪽에서 오른쪽으로 계산됩니다.

선행 순서

연산자는 다음 우선 순위 순서로 평가됩니다.

Await 연산자

Await

산술 연산자 및 연결 연산자

지수(^)

단항 ID 및 부정(+, )

곱하기 및 부동 소수점 나누기(*, /)

정수 나누기(\)

모듈식 산술(Mod)

더하기 및 빼기(+, )

문자열 연결(&)

산술 비트 시프트(<<, >>)

비교 연산자

모든 비교 연산자(=, <>, <, <=, >, >=, Is, IsNot, Like, TypeOf...Is)

논리 및 비트 연산자

부정(Not)

논리곱(And, AndAlso)

포괄 분리(Or, OrElse)

배타적 분리(Xor)

설명

= 연산자는 대입 연산자가 아니라 같음 비교 연산자일 뿐입니다.

문자열 연결 연산자(&)는 산술 연산자가 아니지만 우선적으로 산술 연산자를 사용하여 그룹화됩니다.

IsIsNot 연산자는 개체 참조 비교 연산자입니다. 두 개체의 값은 비교하지 않습니다. 두 개체 변수가 동일한 개체 인스턴스를 참조하는지 여부만 확인합니다.

associativity

같은 우선 순위의 연산자가 식에 함께 나타나는 경우(예: 곱하기 및 나누기) 컴파일러는 각 연산이 왼쪽에서 오른쪽으로 발생할 때 각 연산을 평가합니다. 다음 예제에서는 이것을 보여 줍니다.

Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)

첫 번째 식은 나누기 96/8(결과 12)을 계산한 다음, 나누기 12/4를 계산하여 3을 생성합니다. 컴파일러는 왼쪽에서 오른쪽으로 n1에 대한 작업을 평가하므로 해당 순서가 n2에 대해 명시적으로 표시될 때 평가는 동일합니다. n1n2 모두 3의 결과를 갖습니다. 반면, n3 괄호로 인해 컴파일러가 8/4를 먼저 평가하도록 강제하기 때문에 48의 결과가 발생합니다.

이 동작으로 인해 연산자는 Visual Basic에서 왼쪽 결합합니다.

우선 순위 및 결합성 재정의

괄호를 사용하여 식의 일부 부분을 다른 부분 앞에 강제로 계산할 수 있습니다. 우선 순위와 왼쪽 결합성을 모두 재정의할 수 있습니다. Visual Basic은 항상 외부에 괄호로 묶인 작업을 수행합니다. 그러나 괄호 내에서 괄호 안에 괄호를 사용하지 않는 한 일반적인 우선 순위와 결합성을 유지합니다. 다음 예제에서는 이것을 보여 줍니다.

Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.

참고 항목