c tipo Qual é o argumento para printf que formata um longo?




printf tipo long (6)

A função printf aceita um tipo de argumento, como %d ou %i para um signed int . No entanto, não vejo nada por um valor long .


Depende, se você está se referindo a longa unsigned o caractere de formatação é "%lu" . Se você está se referindo a assinatura longa, o caractere de formatação é "%ld" .


Eu acho que para responder a essa pergunta definitivamente seria necessário conhecer o nome do compilador e a versão que você está usando e a plataforma (tipo de CPU, sistema operacional, etc.) para a qual está compilando.


Caso você esteja procurando imprimir unsigned long long , use:

unsigned long long n;
printf("%llu", n);

Para todas as outras combinações, eu acredito que você usa a tabela do printf manual , pegando a linha, depois o rótulo da coluna para qualquer tipo que você esteja tentando imprimir (como eu faço com printf("%llu", n) acima).


Na maioria das plataformas, long e int são do mesmo tamanho (32 bits). Ainda assim, ele possui seu próprio especificador de formato:

long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned

Para 64 bits, você desejaria um long long :

long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned

Ah, e claro, é diferente no Windows:

printf("%l64d", n); // signed
printf("%l64u", un); // unsigned

Freqüentemente, quando estou imprimindo valores de 64 bits, acho útil imprimi-los em hexadecimal (geralmente com números grandes, são ponteiros ou campos de bits).

unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"

vai imprimir:

0x00000000DEADBEEF

Btw, "long" não significa muito mais (em mainstream x64). "int" é o tamanho int da plataforma, tipicamente 32 bits. "longo" geralmente é o mesmo tamanho. No entanto, eles têm diferentes semânticas de portabilidade em plataformas mais antigas (e plataformas embarcadas modernas!). "long long" é um número de 64 bits e geralmente o que as pessoas pretendiam usar, a menos que realmente soubessem o que estavam fazendo editando um pedaço de código portátil da plataforma x. Mesmo assim, eles provavelmente teriam usado uma macro para capturar o significado semântico do tipo (por exemplo, uint64_t).

char c;       // 8 bits
short s;      // 16 bits
int i;        // 32 bits (on modern platforms)
long l;       // 32 bits
long long ll; // 64 bits 

No passado, "int" tinha 16 bits. Você pensaria que agora seria 64 bits, mas não, isso teria causado problemas insanos de portabilidade. É claro que até isso é uma simplificação da verdade arcana e rica em história. Veja wiki:Integer


Coloque um l (letra minúscula L) diretamente antes do especificador.

unsigned long n;
long m;

printf("%lu %ld", n, m);





long-integer