Desenvolvimento - C#

Série aprenda C# - Operadores em C#

Neste terceiro artigo da série aprenda C# aprenderemos sobre os operadores da linguagem.

por Cleber Dantas



No ultimo artigo da série aprenda C# vimos como é a cara de um programa escrito em C#, como configurar nossas variáveis de ambiente, como compilar um programa usando o compilador de linha de comando (‘csc.exe’), os tipos de dados básicos da linguagem, o que são funções e rotinas, o que são variáveis e constantes e ainda aprendemos sobre conversões. Para maiores informações veja:

http://www.linhadecodigo.com.br/artigos.asp?id_ac=995

Introdução

Neste terceiro artigo da série aprenda C# aprenderemos sobre os operadores da linguagem, são eles:

· Operadores aritméticos

· Operadores de atribuição

· Operadores relacionais

· Operadores lógicos

E ainda vamos ver o que é precedência de operador, prefixo e sufixo.

Operadores aritméticos

Em C# temos os seguintes operadores aritméticos:

Operador Descrição

+ (Adição)

- (Subtração)

* (Multiplicação)

/ (Divisão)

% (Resto/Módulo)

Dos cinco operadores citados acima os três primeiros trabalham da maneira que nós já conhecemos (Adição, Subtração e Multiplicação), já o operador de Divisão ‘/’ trabalha de maneira diferente na divisão de um inteiro, por exemplo, quando dividimos 11 por 2 usando esse operador (sendo 11 um inteiro) o resto da divisão é descartado, pois os inteiros não aceitam numeros fracionários, ou seja, o resultado seria 5. Já o operador ‘%’ tem como sua única função pegar o resto de uma divisão usando o mesmo exemplo dividindo 11 por 2 usando o operador ‘%’ modulo o resultado seria 1, já que é o resto da divisão.

Agora vamos fazer um pequeno exercício para praticar os conceitos aprendidos, veja:

using System;

class OperadoresAritmeticos

{

public static void Main ()

{

int soma = 0, diferenca=0, produto=0, resto=0;

double divisao=0; // resultado da divisão

int num1 = 10, num2 = 2;

soma = num1 + num2;

diferenca = num1 - num2;

produto = num1 * num2;

divisao = num1 / num2;

// resto de 3/2

resto = 3 % num2;

Console.WriteLine("num1 = {0}, num2 = {1}", num1, num2);

Console.WriteLine();

Console.WriteLine("Soma de {0} e {1} é {2}", num1, num2, soma);

Console.WriteLine("Diferença de {0} e {1} é {2}", num1, num2, diferenca);

Console.WriteLine("Produto de {0} e {1} é {2}", num1, num2, produto);

Console.WriteLine("Quociente de {0} e {1} é {2}", num1, num2, divisao);

Console.WriteLine();

Console.WriteLine("resto de 3 quando é dividido por {0} é {1}", num2, resto);

}

}

O exemplo acima embora simples faz uso de todos os operadores aritméticos, como você já viu no artigo passado o método ‘WriteLine’ da classe ‘Console’ apenas mostra uma mensagem na tela, veja a seguinte linha de código:

Console.WriteLine("Soma de {0} e {1} é {2}", num1, num2, soma);

Você deve estar se perguntando o que significa esses ‘{0}, {1} e {2}’, isso serve para nós dizermos ao programa onde se encontra o valor da variavel nessa string, ou seja, ‘{0}’ será substituído por ‘num1’, ‘{1}’ será substituído por ‘num2’ e ‘{2}’ será substituído por ‘soma’.

Operadores de atribuição

Em C# temos os seguintes operadores de atribuição:

Operador Descrição

= (Atribuição simples)

+= (Atribuição aditiva)

-= (Atribuição Subtrativa)

*= (Atribuição Multiplicativa)

/= (Atribuição de divisão)

%= (Atribuição de módulo)

Um operador de atribuição serve justamente para atribuirmos um valor a uma variável, veja:

x = 5;

Ou seja, simplesmente atribuímos o valor 5 a variável x usando o operador de atribuição simples ‘=’.

Outro exemplo:

int num1=10, num2=2;

num1 += num2;

Primeiro atribuímos o valor 10 a variável num1 e o valor 2 a variável num2, na segunda linha atribuímos o valor de num2 a variável num1 com o operador de atribuição ‘+=’, que valor terá num1 agora?

Neste caso ‘num1’ terá o valor atribuído igual a 12, pois seria o mesmo que:

int num1=10, num2=2;

num1 = num1 + num2;

O mesmo é valido para os outros operadores, exemplo:

int num1=10, num2=2;

num1 -= num2;

O que seria o mesmo que:

int num1=10, num2=2;

num1 = num1 - num2;

Neste caso usamos o operador ‘-=’ e o resultado de num1 seria 8, e assim por diante.

Operadores relacionais

Em C# temos os seguintes operadores relacionais:

Operador Descrição

== (Igualdade)

> (Maior)

< (Menor)

<= (Menor igual)

>= (Maior igual)

!= (Diferente)

Uma expressão relacional sempre retorna um valor Booleano, ou seja, verdadeiro ou falso, por exemplo:

Definindo duas variáveis

int num1 = 2, num2 = 5;

Então,

num1 == num2  
    // falso
num1 != num2   
    // verdadeiro
num1 > num2  // falso
num1 < num2  // verdadeiro
num1 <= num2 
    // verdadeiro

num1 >= num2 // falso

Importante: Isso mesmo, quando fazemos comparações (relação) para sabermos se dois números são iguais usamos dois (2) sinais de igualdade ‘==’ o que é diferente do operador de atribuição simples ‘=’.

Operadores lógicos

Em C# temos os seguintes operadores lógicos:

Operador Descrição

&& (E)

|| (OU)

Os operadores lógicos são usados para combinar comparações, exemplo:

Definindo duas variáveis

int num1 = 1, num2 = 3;

bool PrimeiroTeste = num1 > 3 && num2 < 10

Neste caso a variável ‘PrimeiroTeste’ será falsa, pois numa expressão onde usamos o operador lógico && (E) as duas expressões relacionais tem que ser verdadeiras, neste caso a primeira é falsa(num1 não é maior que 3) e a segunda é verdadeira (num2 é menor que 10), mas para que a variável PrimeiroTeste seja verdadeira as duas condições tem que ser verdadeira o que não ocorre.

int num1 = 1, num2 = 3;

bool SegundoTeste = num1 > 3 || num2 < 10

Neste caso a variável ‘SegundoTeste’ é verdadeira, pois quando usamos o operador lógico || (OU) basta que uma das comparações seja verdadeira.

Precedência de Operador

Quando falamos de operadores aritméticos, alguns operadores têm precedência sobre outros, veja:

int X = 25 – 7 * 2;

A expressão acima tem duas respostas dependendo do modo que se faça à conta, por exemplo, 25 - 7 = 18, 18 * 2 = 36, x = 36. Ou, 7*2 = 14, 25-14 = 11, x = 11.

Qual resposta é correta??

Neste caso a segunda, ou seja, x = 11, pois o operador de multiplicação ‘*’ tem precedência sobre o operador de subtração ‘-’, assim o calculo de multiplicação é feito primeiro.

Mas e se eu quisesse que a subtração fosse feita primeiro?

Simples, para resolver esse ‘problema’ usamos os parênteses, assim:

int X = (25 – 7) * 2;

Agora sim o resultado seria 36, pois o que esta dentro dos parênteses é calculado primeiro e depois com o resultado desse calculo é calculado o resto da expressão.

Incremento e Decremento

Incrementar um número ou variável significa adicionar 1 ao valor atual, da mesma forma que subtrair 1 de um número ou variável se da o nome de Decremento.

Em C# temos o seguinte:

Operador Descrição

++ (Incremento)

-- (Decremento)

Exemplo:

int X = 1;

X++;

Aqui estamos atribuindo o valor 1 a variável X e depois na linha seguinte incrementando 1 a mesma variável, ou seja, nesse momento X vale 2.

O mesmo é válido para o Decremento, veja:

X--;

Se antes X valia 2 agora vale 1, pois usamos o operador de decremento assim tirando 1 da variável.

Prefixo e Sufixo

Tanto o operador de incremento quanto o operador de decremento tem duas formas de serem aplicados: prefixo e sufixo.

Prefixo à O operador é digitado antes do nome da variável

Ex:

int X = ++Y;

Sufixo à O operador é digitado depois do nome da variável

Ex:

int X = Y++;

O que ocorre é que quando estamos atribuindo um valor a uma variável usando prefixo, ou seja, algo do tipo <variavel1> = ++<variavel2> você esta dizendo para que a variável2 seja incrementada e logo depois seja atribuído o seu valor a variável1.

Exemplo:

int x = ++y;

Vamos imaginar que a variável y vale 2 e que a variável x vale 0 (zero), como estamos usando o prefixo neste caso a variável y será incrementa em 1, ou seja, agora y vale 3 e logo em seguida o valor de y é atribuído a variável x que agora também vale 3.

No caso de usarmos o sufixo primeiro o valor de y seria passado para a variável x, ou seja, x valeria 2 e em seguida y seria incrementado assim y agora vale 3.

Conclusão

Vimos neste artigo os operadores da linguagem, aprendemos sobre os operadores aritméticos, operadores de atribuição, operadores relacionais e operadores lógicos, além de termos aprendido também sobre incremento e decremento e ainda sobre prefixo e sufixo.

Qualquer dúvida, crítica ou sugestão fale comigo: cleberwd@hotmail.com

Cleber Dantas

Cleber Dantas - Ministra palestras e mini-cursos, MSP (Microsoft Student Partner), MCAD (Microsoft Certified Application Developer) e MCTS (Microsoft certified Technology Specialist). Membro do comitê Web/Infra do INETA Brasil (International .NET Association), colaborador do Portal Linha de código e IMasters. Trabalha com a plataforma .NET desde 2003.