Em ciência da computação, um inteiro é um dado do tipo integral, um tipo de dado que representa algum subconjuntofinito dos inteiros matemáticos. Tipos de dados integrais podem ser de tamanhos diferentes e podem ou não ser permitido conterem valores negativos. Inteiros são normalmente representados em um computador como um grupo de dígitos binários. O tamanho do grupo varia de modo que o conjunto de tamanhos de inteiros disponíveis variam entre tipos diferentes de computadores. O hardware do computador quase sempre fornece uma maneira de representar um registro do processador ou endereço de memória como um inteiro.
Valor e representação
O valor de um item com um tipo integral é o inteiro matemático ao qual ele corresponde. Os tipos integrais podem ser sem sinal (capazes de representar apenas números inteiros não negativos) ou com sinal (capazes de representar números inteiros negativos também).[1]
Um valor inteiro é normalmente especificado no código-fonte de um programa como uma sequência de dígitos opcionalmente prefixados com + ou -. Algumas linguagens de programação permitem outras notações, como hexadecimal (base 16) ou octal (base 8). Algumas linguagens de programação também permitem separadores de grupos de dígitos.[2]
A representação interna desse dado é a forma como o valor é armazenado na memória do computador. Ao contrário dos inteiros matemáticos, um dado típico em um computador tem algum valor mínimo e máximo possível.
A representação mais comum de um número inteiro positivo é uma sequência de bits, usando o sistema numérico binário. A ordem dos bytes de memória que armazenam os bits varia (veja extremidade. A largura ou precisão de um tipo integral é o número de bits em sua representação. Um tipo integral com n bits pode codificar 2n números; por exemplo, um tipo sem sinal normalmente representa os valores não negativos de 0 a 2n−1. Outras codificações de valores inteiros para padrões de bits são algumas vezes usadas, por exemplo, decimal codificado em binário ou código de Gray, ou como códigos de caracteres impressos, como ASCII.
Algumas linguagens de computador definem tamanhos inteiros de forma independente da máquina; outras têm definições variadas dependendo do tamanho da palavra do processador subjacente. Nem todas as implementações de linguagem definem variáveis de todos os tamanhos inteiros, e os tamanhos definidos podem nem mesmo ser distintos em uma implementação particular. Um número inteiro em uma linguagem de programação pode ter um tamanho diferente em uma linguagem diferente ou em um processador diferente.
Diferentes CPUs suportam diferentes tipos de dados inteiros. Geralmente é aceito tanto tipos com sinal quanto sem sinal, a variação é maior na largura de bits suportada. A tabela acima lista larguras geralmente usadas em hardware por processadores. Linguagens de programação de alto nível fornecem mais possibilidades. Pode-se instancializar um tipo de dado com o dobro da largura máxima permitida pela arquitetura, ou criar um campo de bits com largura menor que o mínimo definido.
Linguagens como Lisp, REXX e Haskell suportam inteiros de precisão arbitrária (também conhecidos como bignum), que podem, inclusive, crescer infinitamente até os limites físicos de memória do sistema computacional.
Um tipo de dado boolean pode representar dois valores, 0 e 1. Esse tipo de dado inteiro pode ser armazenado usando somente um bit, mas por questões de conveniência e desempenho de acesso, geralmente é alocado um byte completo para esse tipo de dado.
Aplicações
Ponteiros
Um ponteiro é geralmente representado por um inteiro sem sinal de uma largura específica, com tamanho geralmente igual a maior largura permitida pelo hardware da arquitetura do sistema computacional. O valor armazenado por esse inteiro é geralmente o endereço de memória apontado.
O termo byte originalmente significava "a menor unidade endereçável de memória", e, no passado, de acordo com a arquitetura poderia representar 5, 6, 7, 8, 9 bits de largura. O termo octeto sempre se refere a um tipo de dado com largura de 8 bits. O termo é geralmente usado em redes de computadores, no qual sistemas com arquiteturas diferentes (com possíveis larguras diferentes) devem comunicar-se em um protocolo comum.
No uso moderno, byte quase sempre refere-se a oito bits, já que todas as outras opções de largura caíram em desuso. Isso significa que byte tornou-se um sinônimo para octeto.
O termo word refere-se a um grupo de bits processados simultaneamente por processadores de uma determinada arquitetura. Portanto, sua largura depende do processador em questão. Várias diferentes larguras são usadas, incluindo 6, 8, 12, 16, 18, 24, 32, 36, 39, 48, 60 e 64 bits. Atualmente (2007), a largura de 32 bits é a mais comum entre computadores de uso geral, com a chegada cada vez mais comum de larguras de 64 bits. Sistemas embarcados ainda utilizam larguras de 8 e 16 bits.