Tcl - Precedência de Operadores

A precedência do operador determina o agrupamento de termos em uma expressão. Isso afeta como uma expressão é avaliada. Certos operadores têm precedência mais alta do que outros; por exemplo, o operador de multiplicação tem precedência mais alta do que o operador de adição.

For example: x = 7 + 3 * 2; aqui, x é atribuído a 13, não 20, porque o operador * tem precedência mais alta do que +, então ele primeiro é multiplicado por 3 * 2 e, em seguida, é adicionado a 7.

Aqui, os operadores com a precedência mais alta aparecem na parte superior da tabela, aqueles com a mais baixa aparecem na parte inferior. Em uma expressão, os operadores de precedência mais altos serão avaliados primeiro.

Categoria Operador Associatividade
Unário + - Direita para esquerda
Multiplicativo * /% Da esquerda para direita
Aditivo + - Da esquerda para direita
Mudança << >> Da esquerda para direita
Relacional <<=>> = Da esquerda para direita
Igualdade ==! = Da esquerda para direita
E bit a bit E Da esquerda para direita
XOR bit a bit ^ Da esquerda para direita
OR bit a bit | Da esquerda para direita
E lógico && Da esquerda para direita
OR lógico || Da esquerda para direita
Ternário ?: Direita para esquerda

Exemplo

Tente o exemplo a seguir para entender a precedência do operador disponível na linguagem Tcl -

#!/usr/bin/tclsh

set a 20
set b 10
set c 15
set d 5

set  e [expr [expr $a + $b] * $c / $d ]     ;# ( 30 * 15 ) / 5
puts "Value of (a + b) * c / d is : $e\n"

set  e [expr  [expr [expr $a + $b] * $c] / $d]   ;#  (30 * 15 ) / 5]
puts "Value of ((a + b) * c) / d is  : $e\n"

set  e  [expr [expr $a + $b] * [expr $c / $d] ]   ;# (30) * (15/5)
puts "Value of (a + b) * (c / d) is  : $e\n"

set  e  [expr $a + [expr $b * $c ] / $d ] ;#  20 + (150/5)
puts "Value of a + (b * c) / d is  :  $e\n"

Quando você compila e executa o programa acima, ele produz o seguinte resultado -

Value of (a + b) * c / d is : 90

Value of ((a + b) * c) / d is  : 90

Value of (a + b) * (c / d) is  : 90

Value of a + (b * c) / d is  :  50