No estudo da ciência da computação, existem conceitos que são verdadeiros pilares para todo o restante do conhecimento. Hoje vamos revisar alguns desses fundamentos: como os dados são representados internamente, como a lógica booleana permite tomar decisões, o que define um algoritmo, as estruturas que controlam o fluxo de execução e uma noção inicial de complexidade. Esses tópicos formam a base sobre a qual construímos desde pequenos scripts até grandes sistemas.

1. Representação de dados

No nível mais baixo, os computadores trabalham com bits, que podem assumir os valores 0 ou 1. Um conjunto de 8 bits forma um byte, capaz de representar 256 valores diferentes (2⁸). Para facilitar a leitura humana, usamos sistemas numéricos como o decimal (base 10), o binário (base 2) e o hexadecimal (base 16).

A conversão entre binário e decimal é simples: cada posição representa uma potência de 2. Por exemplo, o número binário 1010 corresponde a 1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 8 + 0 + 2 + 0 = 10 em decimal. O sistema hexadecimal é útil para representar bytes de forma compacta: cada dígito hexadecimal representa 4 bits (nibble). Assim, o valor 1010₂ = A₁₆.

# Exemplo de conversão em Python
binario = "1010"
decimal = int(binario, 2)
print(decimal)  # Saída: 10

2. Lógica booleana

A álgebra booleana trabalha com valores verdadeiro (1) e falso (0). Os operadores fundamentais são AND (E), OR (OU) e NOT (NÃO). A tabela verdade abaixo mostra o resultado de cada operador:

AND: 1 & 1 = 1, 1 & 0 = 0, 0 & 1 = 0, 0 & 0 = 0.
OR: 1 | 1 = 1, 1 | 0 = 1, 0 | 1 = 1, 0 | 0 = 0.
NOT: ¬1 = 0, ¬0 = 1.

Esses operadores são a base de todos os circuitos digitais e também são usados em expressões condicionais em linguagens de programação. Compreender a lógica booleana é essencial para escrever condições corretas e eficientes.

Além disso, podemos combinar operadores para formar expressões mais complexas, como (A AND B) OR (NOT C). A avaliação segue regras de precedência semelhantes à aritmética.

3. O que é um algoritmo?

Um algoritmo é uma sequência finita de passos bem definidos que resolvem um problema ou realizam uma tarefa. Para ser considerado um algoritmo, a sequência deve ter entrada, saída, ser definida (cada passo é preciso), efetiva (executável) e finita (termina após um número finito de passos).

Exemplos cotidianos incluem uma receita de bolo, instruções de montagem ou um manual de instruções. Em computação, implementamos algoritmos em linguagens de programação para automatizar processos.

Um algoritmo simples para calcular a média de dois números:

Algoritmo media
1. Ler n1, n2
2. Calcular m = (n1 + n2) / 2
3. Exibir m
Fim

4. Estruturas de controle

Para que um algoritmo possa tomar decisões e repetir ações, utilizamos estruturas de controle. As três principais são:

  • Sequência: os passos são executados um após o outro, na ordem em que aparecem.
  • Seleção (ou decisão): permite executar um bloco de código apenas se uma condição for verdadeira (if/else).
  • Repetição (iteração): executa um bloco enquanto uma condição for verdadeira (while) ou para cada elemento de uma sequência (for).

Exemplo em pseudocódigo com seleção e iteração:

Algoritmo par_impar
Para cada número n de 1 a 5:
  Se n % 2 == 0:
    Exibir n, "é par"
  Senão:
    Exibir n, "é ímpar"

Essas estruturas são universais e estão presentes em todas as linguagens de programação, variando apenas a sintaxe.

5. Noção de complexidade de algoritmos

Nem todos os algoritmos são igualmente eficientes. A complexidade mede como o tempo de execução (ou o uso de memória) cresce à medida que o tamanho da entrada aumenta. A notação mais comum é a notação Big O, que descreve o comportamento assintótico.

  • O(1): tempo constante, independente da entrada (acessar um elemento de um array por índice).
  • O(n): tempo linear, proporcional ao tamanho da entrada (percorrer uma lista).
  • O(n²): tempo quadrático, comum em algoritmos com dois loops aninhados (como ordenação por bolha).

Entender a complexidade ajuda a escolher o algoritmo mais adequado para cada problema, especialmente quando lidamos com grandes volumes de dados.

Perguntas frequentes

O que é um bit?

Bit é a menor unidade de informação em computação, podendo assumir os valores 0 ou 1. A palavra vem do inglês "binary digit".

Qual a diferença entre AND e OR?

O operador AND retorna verdadeiro apenas quando ambas as condições são verdadeiras. O operador OR retorna verdadeiro se pelo menos uma das condições for verdadeira.

O que é um algoritmo?

Um algoritmo é uma sequência finita e bem definida de passos que resolve um problema. Ele deve ter entrada, saída e ser determinístico.

O que significa O(n)?

O(n) significa que o tempo de execução de um algoritmo cresce linearmente com o tamanho da entrada. Por exemplo, percorrer todos os elementos de uma lista uma vez.