💻
Micro-fundamentos - AEDs
  • Introdução
  • Algoritmos e Estruturas de Dados 1
    • Parte 1 - Começando com o básico
      • Criando nosso primeiro algoritmo
      • Estruturas de dados primitivas
      • Atribuição e declaração de variáveis
      • Leitura e escrita de dados
      • Estruturas condicionais e Operadores relacionais
      • Operadores aritméticos
      • Operadores lógicos
      • Estruturas de repetição
      • Funções e escopo
    • Parte 2 - Conceitos avançados
      • Introdução a ponteiros
      • Estruturas de dados não primitivas
      • Entendendo-recursão
      • Retornando argumentos de funções recursivas
      • Como a máquina interpreta seus códigos
    • Parte 3 - Conhecendo POO e seus Princípios
      • O que é Programação Orientada a Objetos?
      • Criando nossa primeira classe
      • Entendendo Encapsulação
      • Entendendo Herança
      • Entendendo Polimorfismo
  • Algoritmos e Estruturas de Dados 2
    • Parte 1 - Complexidade e Programação Competitiva
      • Complexidade e notação Big O
      • Complexidade em funções recursivas
      • Crescimento de funções - Notação Theta e Omega
      • Programação competitiva
    • Parte 3 - Algoritmos de pesquisa
      • Busca linear
    • Parte 4 - Ordenação Interna
      • Quicksort
    • Parte 5 - Tipos Abstratos de Dados (TAD)
    • Parte 6 - Estruturas Flexíveis e Estáticas
    • Parte 7 - Árvores e Tabela Hash
      • Árvore Binária
  • Algoritmos e Estruturas de Dados 3
    • CRUD
    • Intercalação balanceada
  • C
    • Argumentos-de-entrada
    • debug
      • Introducao-ao-gdb
      • Introducao-ao-valgrind
    • ponteiro
      • Ponteiros e Alocação de Memória em C
    • string
      • Strings em C
      • Leitura-de-Strings-em-C
  • Java
    • Nocoes-basicas
    • Argumentos-de-entrada
    • Debug em Java
      • java-debugger-tool
      • visual-studio-debugger
    • string
      • String-em-Java
    • Tratamento de Exceções em Java
      • try-catch-e-o-throws
  • COMO-CONTRIBUIR
Powered by GitBook
On this page
  • Você vai aprender
  • Pré-requisitos
  • Definição
  • AND ( && )
  • OR ( || )
  • NOT ( ! )
  • Línks uteis
  1. Algoritmos e Estruturas de Dados 1
  2. Parte 1 - Começando com o básico

Operadores lógicos

Você vai aprender

  • O que são operadores lógicos.

  • Quais são e como usar.

Pré-requisitos

  • Operadores aritméticos

Definição

Operações lógicas são aquelas que efetuam operações em expressões boolianas. Para deixar isso mais claro, lembremos das operações que fizemos quando estávamos calculando o troco da padaria:

#include<stdio.h>
#include<stdbool.h>

int main(void) {

  bool falhou_a_compra = false;
  
  float dinheiro_cliente = 50;
  float total_compras = 20;
  
  if(dinheiro_cliente == total_compras) {
    printf("A compra foi um sucesso!\n");
  } else if (dinheiro_cliente > total_compras) {
    float troco = 0;
    printf("A compra foi um sucesso, seu troco foi de R$%g reais!\n", troco);
  } else {
    printf("Erro! Dinheiro insuficiente!\n");
    falhou_a_compra = true;
  }
  
  return falhou_a_compra ;
}

Quando fazemos as operações dinheiro_cliente == total_compras e dinheiro_cliente > total_compras, essas operações implicam que uma expressão booliana é gerada, e, ao trabalhar com operadores lógicos, nós utilizamos essas expressões ou até mesmo variáveis boolianas, para criar as operações lógicas. Operadores lógicos podem ser usadas em estruturas condicionais ou até mesmo em estruturas de repetições (que ainda chegaremos lá).

Por agora, veremos quais são os operadores lógicos, além de ver alguns exemplos.

AND ( && )

O operador "AND" recebe duas ou mais expressões boolianas e retorna verdadeiro se e somente se ambas expressões forem verdadeiras. Por exemplo:

Exemplo do operador AND (&&)
#include<stdio.h>

int main(void) {
    int x = 5;
    int y = 10;
    if (x > 0 && y > 0) {
        // ambos x e y são maiores que 0
        // Este bloco será executado
        printf("ambas condições são verdadeiras\n");
    } else {
        printf("uma das condições é falsa\n");
    }
    return 0;
}

OR ( || )

O operador "OR" recebe duas ou mais expressões boolianas e retorna verdadeiro se pelo menos uma das expressões for verdadeira. Por exemplo:

Exemplo do operador OR (||)



    if (x > 0 || y > 0) {
        // ou x ou y ou ambos são maiores que 0
        // Este bloco será executado
        printf("uma das condições pelo menos é verdadeira\n");
    } else {
        printf("Ambas condições são falsas");
    }
    return 0;
}

NOT ( ! )

O operador "NOT" pega um único operando booliano e retorna o valor oposto. Por exemplo:

Exemplo do operador NOT (!)
#include<stdio.h>
#include<stdbool.h>
int main(void) {

    bool eh_verdadeiro = false;
    if (!eh_verdadeiro) {
        // O operador NOT irá inverter o valor, se for falso
        // este será verdadeiro, se for verdadeiro, agora ele irá ser falso
        // este bloco será executado quando o valor for falso
        printf("a variável tem o valor falso\n");
    } else {
        printf("a variavel tem o valor verdadeiro\n");
    }
    return 0;
}

Vale ressaltar que, assim como nos operadores aritméticos, os operadores lógicos costumam ter uma ordem de precedência e uma sequência lógica de avaliação das operações. O operador "NOT "tem a precedência mais alta, seguido pelo operador "AND" e pelo operador "OR". Porém, em algumas situações, também é possível agrupar as operações utilizando parênteses para indicar a ordem de avaliação.

Uma sugestão para vocês, não esqueçam de pegar esses trechos de códigos e rodar na máquina de vocês, talvez colocando essas frases comentadas dentro de um print para ver o funcionamento dos operadores lógicos.

Línks uteis

  • Operadores lógicos em C

  • Leia mais sobre todos os operadores em C

PreviousOperadores aritméticosNextEstruturas de repetição

Last updated 2 years ago