Manipular inteiros no 64 bits

Janeiro 2017

Em C, um inteiro tradicional não assinado de 32 bits não pode exceder o valor de 4 294 967 295.
É possível que você seja levado a lidar com números maiores e, por isso, você precisará de inteiros codificados em 64 bits. No entanto, este tipo nem sempre é tratado da mesma forma que um inteiro comum. Na verdade, as constantes inteiras e a exibição destes números não são definidas da mesma maneira.

Inteiros 64 bits não assinados


Type: unsigned long long
Formatação para a exibição: %llu
Sufixo para definir uma constante: ULL

Exemplo:
//Atribua o valor 4294967296 na 
unsigned long long a = 4294967296ULL; 
//Atribua este valor 
printf("%llu", a);

Inteiros 64 bits assinados


Type: long long
Formatação para a exibição: %lld
Sufixo para definir uma constante: LL

Exemplo:
//Atribua o valor 4294967296 na 
long long a = 4294967296LL; 
//Atribua este valor
printf("%lld", a);

Porque um sufixo bizarro para definir um valor constante?


Se você tentar, por exemplo:
unsigned long long a = 4294967296


O seu compilador lhe dirá que este número é demasiado grande para o tipo "longo". Ou seja, um inteiro em 32 bits. As constantes têm este tipo por padrão. Em última análise, este conceito está diretamente ligado à arquitetura dos processadores de 32 bits. Um registro de 32 do processador é limitado e seu compilador vai tentar, por padrão, botar os números em um único registo. Mas com um sufixo como LL e ULL, o seu compilador armazenará o seu número em dois registros, ou seja, 64 bits, deixando uma capacidade muito maior.



Tradução feita por Lucia Maurity y Nouira

Veja também

Artigo original publicado por . Tradução feita por pintuda. Última modificação: 4 de novembro de 2011 às 11:49 por pintuda.
Este documento, intitulado 'Manipular inteiros no 64 bits', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.