Em ciência da computação, um inteiro é um dado do tipo integral, um tipo de dado que representa algum subconjunto finito 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.
Existem quatro maneiras bem conhecidas de representar números com sinais em um sistema de computação binário. O mais comum é o complemento de dois, que permite que um tipo integral com sinal com n bits represente números de −2(n−1) a 2(n−1)−1. A aritmética de complemento de dois é conveniente porque há uma correspondência um-para-um perfeita entre representações e valores (em particular, sem +0 e -0 separados), e porque adição, subtração e multiplicação não precisam distinguir entre tipos com e sem sinal. Outras possibilidades incluem binário de deslocamento, magnitude de sinal e complemento de um.
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.
Exemplos comuns
Largura (bits) | Nome | Bloco com sinal | Bloco sem sinal | Uso |
---|---|---|---|---|
8 | byte, octeto | -128 a +127 | 0 a +255 | Caracteres ASCII, C int8_t, Java byte |
16 | halfword, word | -32 768 a +32 767 | 0 a +65 535 | Caracteres UCS-2, C int16_t, Java char, Java short |
32 | word, doubleword, longword | -2 147 483 648 a +2 147 483 647 | 0 a +4 294 967 295 | Caracteres UCS-4, Truecolor com canal alfa, C int32_t, Java int |
64 | doubleword, longword, quadword | -9 223 372 036 854 775 808 a +9 223 372 036 854 775 807 | 0 a +18 446 744 073 709 551 615 | C int64_t, Java long |
128 | -170 141 183 460 469 231 731 687 303 715 884 105 728 a +170 141 183 460 469 231 731 687 303 715 884 105 727 | 0 a +340 282 366 920 938 463 463 374 607 431 768 211 455 |
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.
Nibble
Um inteiro com largura de quatro bits é chamado nibble, e representa um dígito em numeração hexadecimal.
Bytes e octetos
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.
Words
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.
Ver também
- ↑ Cheever, Eric. «Representation of numbers». Swarthmore College. Consultado em 11 de setembro de 2011
- ↑ Madhusudhan Konda (2 de setembro de 2011). «A look at Java 7's new features - O'Reilly Radar». Radar.oreilly.com. Consultado em 15 de outubro de 2013