A printf
função aceita um tipo de argumento, como %d
ou %i
para a signed int
. No entanto, não vejo nada por um long
valor.
c
printf
long-integer
Thomas Owens
fonte
fonte
Respostas:
Coloque uma
l
(letra minúscula L) diretamente antes do especificador.fonte
printf("%ld", ULONG_MAX)
gera o valor como -1. Deverá permanecerprintf("%lu", ULONG_MAX)
sem assinatura, conforme descrito por @Blorgbeard abaixo.%ld
para ser mais harmônico com a questão do OP.%l
gatilhoswarning: unknown conversion type character 0x20 in format [-Wformat]
Eu acho que você quer dizer:
ou
fonte
Na maioria das plataformas,
long
eint
são do mesmo tamanho (32 bits). Ainda assim, ele possui seu próprio especificador de formato:Para 64 bits, você deseja
long long
:Ah, e claro, é diferente no Windows:
Freqüentemente, quando estou imprimindo valores de 64 bits, acho útil imprimi-los em hexadecimal (geralmente com números tão grandes, que são ponteiros ou campos de bits).
irá imprimir:
Btw, "long" não significa muito mais (no x64 convencional). "int" é o tamanho padrão da plataforma, normalmente 32 bits. "long" é geralmente do mesmo tamanho. No entanto, eles têm diferentes semânticas de portabilidade em plataformas mais antigas (e modernas plataformas incorporadas!). "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 usariam uma macro para capturar o significado semântico do tipo (por exemplo, uint64_t).
Voltar no dia, "int" era de 16 bits. Você pensaria que agora seriam 64 bits, mas não, isso teria causado problemas insanos de portabilidade. Obviamente, mesmo isso é uma simplificação da verdade arcana e rica em história. Veja wiki: Inteiro
fonte
long
tamanho 32" ainda é verdade. Por exemplo, eu estou no Oracle Linux x86_64 / amd64, e comnvcc
umalong
é de 8 bytes.Depende, se você estiver se referindo a não assinado por muito tempo, o caractere de formatação é
"%lu"
. Se você está se referindo a assinados por muito tempo, o caractere de formatação é"%ld"
.fonte
%ld
veja aprintf
referência em cplusplus.comfonte
Caso você queira imprimir
unsigned long long
como eu, use:Para todas as outras combinações, acredito que você use a tabela do manual printf , pegando a linha e o rótulo da coluna para qualquer tipo que esteja tentando imprimir (como eu faço
printf("%llu", n)
acima).fonte
Acho que responder definitivamente a essa pergunta exigiria saber o nome e a versão do compilador que você está usando e a plataforma (tipo de CPU, sistema operacional etc.) para a qual está compilando.
fonte