Programação D - 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 sobre outros.

Por exemplo, o operador de multiplicação tem precedência mais alta do que o operador de adição.

Vamos considerar uma expressão

x = 7 + 3 * 2.

Aqui, x é atribuído a 13, não a 20. O motivo simples é que o operador * tem precedência mais alta do que +, portanto, 3 * 2 é calculado primeiro e, em seguida, o resultado é 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 alta são avaliados primeiro.

Categoria Operador Associatividade
Postfix () [] ->. ++ - - Da esquerda para direita
Unário + -! ~ ++ - - (tipo) * & sizeof 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
Condicional ?: Direita para esquerda
Tarefa = + = - = * = / =% = >> = << = & = ^ = | = Direita para esquerda
Vírgula , Da esquerda para direita

Exemplo

Tente o exemplo a seguir para entender a precedência do operador disponível na linguagem de programação D -

import std.stdio;

int main(string[] args) { 
   int a = 20; 
   int b = 10; 
   int c = 15; 
   int d = 5; 
   int e;
   
   e = (a + b) * c / d;      // ( 30 * 15 ) / 5 
   writefln("Value of (a + b) * c / d is : %d\n",  e ); 
   
   e = ((a + b) * c) / d;    // (30 * 15 ) / 5 
   writefln("Value of ((a + b) * c) / d is  : %d\n" ,  e );  
   
   e = (a + b) * (c / d);   // (30) * (15/5) 
   writefln("Value of (a + b) * (c / d) is  : %d\n",  e );
   
   e = a + (b * c) / d;     //  20 + (150/5) 
   writefln("Value of a + (b * c) / d is  : %d\n" ,  e ); 
  
   return 0;
}

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