Inteiros: o básico que todo mundo esquece de explicar direito
O conjunto dos inteiros é o Z. Ele engloba os números positivos, os negativos e o zero. Simples assim. Na prática, você só precisa lembrar que ele é uma extensão do conjunto dos naturais, mas sem a limitação de ser só coisa que sobe. Vá descendo que tem caminho até o infinito negativo. A notação formal é Z = {..., -3, -2, -1, 0, 1, 2, 3, ...}. Ponto. Chave. Fechado. Não tem truque.
Operações e as surpresas que dão errado
Dentro do conjunto dos inteiros você faz adição, subtração e multiplicação sem sair do conjunto. O resultado de qualquer uma dessas operações entre dois inteiros sempre vai ser um inteiro. Isso se chama propriedade de fechamento e é o que torna o conjunto útil para programação, contabilidade e modelagem financeira. A divisão não fecha. Se você dividir 7 por 3, o resultado não é inteiro. Aqui entra a distinção importante: divisão inteira (o quociente) e resto (o modulo). Em Python, por exemplo, 7 // 3 dá 2 e 7 % 3 dá 1. Em C, o comportamento do operador % com números negativos varia entre compiladores antes do padrão C99, o que já causou dor de cabeça real em projetos legados.
conjunto dos inteiros e seus subconjuntos
Todo mundo conhece N (naturais), Z+ (inteiros não negativos), Z- (inteiros não positivos) e Z* (inteiros diferentes de zero). O que as pessoas ignoram é que Z+ inclui o zero em muitas convenções modernas. Depende do livro. Depende do professor. Em documentação técnica, costuma-se usar Z>=0 para evitar ambiguidade. Outro detalhe prático: a diferença entre Z e R (reais). Inteiro não tem parte fracionária. Ponto flutuante é outra coisa. Misturar os dois no código é a causa número um de bugs silenciosos em sistemas que lidam com valores monetários ou contagens de itens.
Um problema real que eu tive
Trabalhei num sistema de compensação financeira onde precisávamos calcular juros diários sobre saldos em Z com casas decimais. A tentação era usar float ou double pra representar os valores. Isso gerava erros de arredondamento que acumulavam e às vezes deixavam uma conta dever centavos a mais ou a menos. O correto era representar tudo como inteiros de micros (centésimos de centavo) e fazer as contas com aritmética inteira. A biblioteca decimal do Python resolve, mas em C++ e Go a solução mais limpa foi usar long long com escala fixa de 6 casas decimais. O código ficou mais verboso, mas os relatórios de auditoria bateram certeiro desde o primeiro deploy. Se você estiver em Python, use a classe Decimal com contexto adequado. Se estiver em linguagens de sistema, integeiros de 64 bits com escala fixa são mais confiáveis que float para valores financeiros. E nunca, nunca, armazene preços em moeda como float.
Propriedades que realmente importam no dia a dia
O conjunto dos inteiros forma um anel comutativo. Isso significa que as operações binárias são associativas, comutativas, têm elemento neutro e inverso aditivo. A multiplicação é associativa e distributiva em relação à adição. Não tem inverso multiplicativo para a maioria dos elementos — só 1 e -1 têm. Isso é relevante quando você escreve algoritmos de criptografia ou testes de primalidade, porque a ausência de divisores de zero em Z permite raciocínios que não valem em anéis com divisores de zero. Um insight contra-intuitivo: a ordem total em Z é bem diferente da ordem em R. Em Z, entre dois elementos distintos sempre existe uma distância mínima de 1. Em R, não. Isso muda a estratégia de algoritmos de busca e otimização. Busca binária funciona naturalmente em Z porque o espaçamento é discreto. Em R, você precisa de tolerância epsilon e mesmo assim pode ter problemas de convergência.
Fatoração e o teorema fundamental da aritmética
Todo inteiro maior que 1 pode ser escrito de forma única como produto de números primos, exceto pela ordem dos fatores e pelos sinais. Em Z, a fatoração considera também -1 como unidade. Isso é diferente de N, onde 1 é a única unidade. Em anéis mais gerais, como Z[i] (inteiros de Gauss), a fatoração única nem sempre vale sem ajustar a definição de "primo". Vale a pena saber isso se você for lidar com criptografia RSA ou curvas elípticas, porque a segurança depende da dificuldade de fatoração em Z, mas a generalização para outros anéis introduz nuances que quebram suposições ingênuas.
Limitações e onde Z falha
O conjunto dos inteiros não é fechado para divisão. Não serve para representar grandezas contínuas. Em simulações físicas, engenharia e machine learning, Z é inútil porque o mundo não é discreto nessa escala. Quando você precisa de precisão arbitrária, inteiros de bigint são melhores que floats, mas têm custo computacional alto: multiplicação de dois números de n bits leva tempo O(n^1.585) com Schöhage-Strassen, ou O(n log n) com FFT-based methods, enquanto float opera em hardware dedicado e éorders de grandeza mais rápido para valores pequenos. Se o seu problema exige operações em R com precisão controlada, use Decimal ou frações rationais, não inteiros crus. Se precisa de números complexos, Z não chega. Em finanças, inteiros com escala fixa são sólidos até que o volume de transações exija paralelismo massivo, aí a análise de throughput mostra que a manipulação de bigints pode gargalar em 30 a 40% comparado a SIMD float, dependendo da arquitetura.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Implementação prática
Em Python, int é arbitrariamente preciso. Basta usar. Em JavaScript, Number é float de dupla precisão e inteiros seguros vão até 2^53 - 1. Acima disso, use BigInt. Em Rust, i64 e u64 são os workhorses. Em Go, int é 32 ou 64 bits dependendo da arquitetura, então para cross-platform determinístico prefira int64 ou uint64 explicitamente. Para gerar uma lista de inteiros em uma faixa, range em Python é eficiente e preguiçoso. Em C, um loop simples com incremento é mais rápido que construir um array. Em SQL, use uma tabela de números ou RECURSIVE CTE para gerar sequências. Nunca armazene sequências de inteiros como string separada por vírgula — isso é antipadrão e quebra indexação.
conjunto dos inteiros na prática: exemplo de uso
Vamos a um caso concreto. Digamos que você tenha uma tabela de pedidos e precisa calcular o saldo acumulado dia a dia. A abordagem correta é manter uma coluna de tipo integer ou bigint para o saldo em unidades menores (centavos), calcular totais com SUM e aplicar regras de negócio usando comparação inteira. Se usar decimal, certifique-se de que a escala seja suficiente e que o banco não esteja fazendo arredondamento implícito em cada operação intermediária. Em PostgreSQL, numeric(19,4) é seguro para a maioria dos casos financeiros; em MySQL, DECIMAL(19,4) tem comportamento semelhante, mas valide a configuração de sql_mode para evitar truncamento silencioso. Outro exemplo: algoritmo de Euclides para MDC. Em Z, ele é simples e rodando em inteiros de 64 bits leva microssegundos para números dentro do rango usual. A versão recursiva é legível, mas a iterativa evita estouro de pilha em casos extremos. Implementação típica em Python:
def mdc(a, b):\n a, b = abs(a), abs(b)\n while b:\n a, b = b, a % b\n return a Esse código funciona para qualquer par de inteiros, inclusive negativos, e retorna o MDC como inteiro positivo. É o tipo de utilitário que você copia e cola, mas sabe que está correto porque a propriedade de fechamento do resto em Z garante terminação.
O que NÃO fazer
Não use inteiros para representar coordenadas contínuas. Não use inteiros para probabilidades. Não compare inteiros grandes com float por aproximação — a perda de precisão é irreversível. Não confunda zero absoluto com ausência de valor em contextos de banco de dados; NULL em SQL não é o mesmo que 0 em Z, e tratar NULL como zero é uma das causas mais comuns de relatórios financeiros errados que eu já vi. E se precisar de conjuntos ordenados com operações de intervalo, considere estruturas como interval trees ou segment trees. Elas são construídas sobre Z quando os índices são discretos, mas a complexidade de consulta e atualização é O(log n) em vez de O(n) de uma lista simples. Em um sistema que processa milhões de eventos por segundo, essa diferença é a linha entre responder em tempo real e perder requisições.
Referência rápida
Z: {..., -2, -1, 0, 1, 2, ...} Z*: Z \ {0}
Z+: {0, 1, 2, ...} ou {1, 2, ...} dependendo da convenção Z->: {..., -2, -1}
Propriedades principais: fechamento para +, -, *; anel comutativo; domínio de integridade; ordenação total discreta. Limitações principais: não fechado para divisão; impróprio para contínuos; bigints têm custo em tempo e memória.
Alternativas recomendadas: Decimal para finanças, float para ciência com tolerância controlada, rationais para exatidão algébrica, bigints quando o rango ultrapassa 64 bits.