C#: Operadores e expressões

1. Operadores aritméticos

Os operadores aritméticos realizam operações matemáticas básicas, incluindo adição, subtração, multiplicação, divisão e módulo.

Operador Nome Exemplo Resultado
+ Adição 5 + 3 8
- Subtração 5 - 3 2
* Multiplicação 5 * 3 15
/ Divisão 7 / 2 3
% Módulo 7 % 2 1

Aviso: A divisão inteira trunca a parte decimal. 7 / 2 resulta em 3, e não em 3.5. Para obter um resultado em ponto flutuante, pelo menos um operando deve ser do tipo ponto flutuante; por exemplo, 7.0 / 2 resulta em 3.5.

▶ Exemplo

CSHARP
using System;

class Program
{
    static void Main()
    {
        int a = 17, b = 5;

        Console.WriteLine($"Addition: {a} + {b} = {a + b}");
        Console.WriteLine($"Subtraction: {a} - {b} = {a - b}");
        Console.WriteLine($"Multiplication: {a} * {b} = {a * b}");
        Console.WriteLine($"Integer division: {a} / {b} = {a / b}");
        Console.WriteLine($"Floating-point division: {a * 1.0} / {b} = {a * 1.0 / b}");
        Console.WriteLine($"Modulus: {a} % {b} = {a % b}");
    }
}
▶ Experimente
TEXT 📖 Somente leitura
Addition: 17 + 5 = 22
Subtraction: 17 - 5 = 12
Multiplication: 17 * 5 = 85
Integer division: 17 / 5 = 3
Floating-point division: 17 / 5 = 3.4
Modulus: 17 % 5 = 2

2. Operadores de incremento e decremento

Os operadores de incremento ++ e decremento -- aumentam ou diminuem o valor de uma variável em 1. A forma prefixada modifica o valor antes de usá-lo; a forma pós-fixada usa o valor primeiro e, em seguida, o modifica.

Operador Nome Descrição
++x Incremento do prefixo Incrementar em 1 e, em seguida, usar o valor
x++ Incremento pós-fixado Use o valor e, em seguida, incremente em 1
--x Decremento com prefixo Decrementa em 1 e, em seguida, usa o valor
x-- Decremento pós-operacional Use o valor e, em seguida, diminua em 1

▶ Exemplo

CSHARP
using System;

class Program
{
    static void Main()
    {
        int x = 10;
        int y = 10;

        Console.WriteLine($"Prefix increment: ++x = {++x}, x = {x}");
        Console.WriteLine($"Postfix increment: y++ = {y++}, y = {y}");

        int m = 5;
        int n = 5;

        Console.WriteLine($"Prefix decrement: --m = {--m}, m = {m}");
        Console.WriteLine($"Postfix decrement: n-- = {n--}, n = {n}");
    }
}
▶ Experimente
TEXT 📖 Somente leitura
Prefix increment: ++x = 11, x = 11
Postfix increment: y++ = 10, y = 11
Prefix decrement: --m = 4, m = 4
Postfix decrement: n-- = 5, n = 4

3. Operadores relacionais

Os operadores relacionais comparam dois valores e retornam um resultado bool (true ou false).

Operador Nome Exemplo Resultado
== Igual a 5 == 5 true
!= Diferente de 5 != 3 true
< Menos que 3 < 5 true
> Maior que 5 > 3 true
<= Menor ou igual a 5 <= 5 true
>= Maior ou igual a 5 >= 6 false

Dica: Não confunda = (atribuição) com == (verificação de igualdade). Usar = em uma condição if causa um erro de compilação ou um bug lógico.


4. Operadores lógicos

Os operadores lógicos combinam expressões booleanas. O C# utiliza && e || com avaliação de curto-circuito, o que significa que o segundo operando não é avaliado quando o resultado já está determinado.

Operador Nome Exemplo Descrição
&& E lógico a && b Verdadeiro se ambos forem verdadeiros (curto-circuito)
` ` OU lógico
! NÃO lógico !a Nega o valor

Atenção: Use && e || para operações lógicas em C#, e não & e |. Estes últimos são operadores bit a bit que também podem operar sobre valores booleanos, mas não realizam curto-circuito.

▶ Exemplo

CSHARP
using System;

class Program
{
    static void Main()
    {
        int age = 25;
        bool hasLicense = true;

        bool canDrive = age >= 18 && hasLicense;
        Console.WriteLine($"Can drive: {canDrive}");

        bool isWeekend = false;
        bool isHoliday = true;
        bool dayOff = isWeekend || isHoliday;
        Console.WriteLine($"Day off: {dayOff}");

        bool isRaining = true;
        Console.WriteLine($"Not raining: {!isRaining}");
    }
}
▶ Experimente
TEXT 📖 Somente leitura
Can drive: True
Day off: True
Not raining: False

5. Operadores de atribuição

Os operadores de atribuição atribuem valores às variáveis. Os operadores de atribuição compostos combinam uma operação e uma atribuição em uma única etapa.

Operador Equivalente Exemplo
= x = 10
+= x = x + y x += 5
-= x = x - y x -= 3
*= x = x * y x *= 2
/= x = x / y x /= 4
%= x = x % y x %= 3

6. Operador condicional

O operador condicional ?: é o único operador ternário do C#. Ele retorna um dos dois valores, dependendo de uma condição.

Sintaxe: condition ? valueIfTrue : valueIfFalse

▶ Exemplo

CSHARP
using System;

class Program
{
    static void Main()
    {
        int score = 72;
        string result = score >= 60 ? "Pass" : "Fail";
        Console.WriteLine($"Score {score}: {result}");

        int a = 15, b = 9;
        int max = a > b ? a : b;
        Console.WriteLine($"Larger value: {max}");
    }
}
▶ Experimente
TEXT 📖 Somente leitura
Score 72: Pass
Larger value: 15

7. Operador de coalescência de nulos

O operador ?? retorna o operando da direita quando o operando da esquerda é null; caso contrário, retorna o valor da esquerda. O operador ??= (C# 8) é o operador de atribuição com coalescência nula, que atribui um valor somente quando a variável é nula.

CSHARP
using System;

class Program
{
    static void Main()
    {
        string name = null;
        string display = name ?? "Anonymous";
        Console.WriteLine($"Name: {display}");

        int? count = null;
        int total = count ?? 0;
        Console.WriteLine($"Total: {total}");

        string title = null;
        title ??= "Default Title";
        Console.WriteLine($"Title: {title}");

        title ??= "New Title";
        Console.WriteLine($"Title: {title}");
    }
}
TEXT 📖 Somente leitura
Name: Anonymous
Total: 0
Title: Default Title
Title: Default Title

8. Operador condicional nulo

O operador ?. verifica se um objeto é nulo antes de acessar um membro. Se o objeto for nulo, a expressão retorna nulo em vez de lançar uma exceção NullReferenceException.

CSHARP
using System;

class Program
{
    static void Main()
    {
        string text = "Hello C#";
        Console.WriteLine($"Length: {text?.Length}");

        text = null;
        Console.WriteLine($"Length: {text?.Length}");

        int? len = text?.Length;
        Console.WriteLine($"Type: {len?.GetType().Name ?? "null"}");
    }
}
TEXT 📖 Somente leitura
Length: 8
Length:
Type: null

9. Precedência dos operadores

A tabela abaixo lista os operadores comuns do C#, ordenados da maior para a menor precedência. Os operadores na mesma linha têm a mesma precedência.

Prioridade Operadores Descrição
1 x++ x-- . ?. () [] Postfix, acesso de membros
2 ++x --x +x -x ! ~ Prefixo, unário
3 * / % Multiplicativo
4 + - Aditivo
5 < > <= >= is as Relacional, verificação de tipos
6 == != Igualdade
7 && E lógico
8 `
9 ?? ??= Coalescência de nulos
10 ?: Condicional
11 = += -= *= /= %= etc. Tarefa

Dica: Em caso de dúvida sobre a precedência, use parênteses () para deixar clara a ordem de avaliação. Isso evita erros e melhora a legibilidade.

❓ Perguntas Frequentes

P: Qual é a diferença entre a divisão de números inteiros e a divisão de números de ponto flutuante? R: A divisão de números inteiros trunca a parte decimal; por exemplo, 7 / 2 resulta em 3; a divisão em ponto flutuante preserva as casas decimais; por exemplo, 7.0 / 2 resulta em 3.5.

P: Qual é a diferença entre ++x e x++? R: ++x primeiro incrementa e retorna o novo valor; x++ retorna o valor atual e, em seguida, incrementa. Em uma instrução isolada, eles se comportam da mesma forma, mas dentro de uma expressão os resultados diferem.

P: Qual é a diferença entre && e &? R: && é um AND lógico de curto-circuito que ignora o operando direito quando o esquerdo é falso; & é um AND bit a bit que também pode operar com valores booleanos, mas sempre avalia ambos os lados.

P: Quando devo usar ?? em vez de ?.? R: Use ?? para fornecer um valor padrão quando o valor for nulo; use ?. para acessar com segurança um membro de um objeto potencialmente nulo, evitando a exceção NullReferenceException.

📖 Resumo

📝 Exercícios

  1. Escreva um programa que calcule 7 / 2 e 7.0 / 2 e exiba os resultados, verificando o comportamento de truncamento da divisão de números inteiros.
  2. Escreva um programa que demonstre a diferença entre ++x e x++ em uma expressão: defina int a = 5 e, em seguida, calcule ++a * 3 e a++ * 3 separadamente e exiba os resultados.
  3. Escreva um programa que utilize o operador condicional para determinar se um número inteiro é positivo, zero ou negativo (é permitido o aninhamento ?:).
  4. Escreva um programa que crie uma variável string definida como null e, em seguida, utilize ?? e ?. para exibir seu valor padrão e acessar seu comprimento com segurança.
  5. Escreva um programa que calcule 2 + 3 * 4 e (2 + 3) * 4, demonstrando como os parênteses afetam a precedência.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%