Fortran - 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.

Por exemplo, x = 7 + 3 * 2; aqui, x é atribuído a 13, não 20, porque o operador * tem precedência mais alta 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
NOT lógico e sinal negativo .não. (-) Da esquerda para direita
Exponenciação ** Da esquerda para direita
Multiplicativo * / Da esquerda para direita
Aditivo + - Da esquerda para direita
Relacional <<=>> = Da esquerda para direita
Igualdade == / = Da esquerda para direita
E lógico .e. Da esquerda para direita
OR lógico .ou. Da esquerda para direita
Tarefa = Direita para esquerda

Exemplo

Tente o exemplo a seguir para entender a precedência do operador em Fortran -

program precedenceOp
! this program checks logical operators

implicit none  

   ! variable declaration
   integer :: a, b, c, d, e
   
   ! assigning values 
   a = 20   
   b = 10
   c = 15
   d = 5
  
   e = (a + b) * c / d      ! ( 30 * 15 ) / 5
   print *, "Value of (a + b) * c / d is :    ",  e 

   e = ((a + b) * c) / d    ! (30 * 15 ) / 5
   print *, "Value of ((a + b) * c) / d is  : ",  e 

   e = (a + b) * (c / d);   ! (30) * (15/5)
   print *, "Value of (a + b) * (c / d) is  : ",  e 

   e = a + (b * c) / d;     !  20 + (150/5)
   print *, "Value of a + (b * c) / d is  :   " ,  e 
  
end program precedenceOp

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