Qual é o argumento para a função printf que formata um tempo?
-
09-06-2019 - |
Pergunta
O printf
função tem um tipo de argumento, como %d
ou %i
para um signed int
.No entanto, eu não vejo nada de long
o valor.
Solução
Colocar um l
(aparece com letra minúscula letra L) diretamente antes do especificador.
unsigned long n;
long m;
printf("%lu %ld", n, m);
Outras dicas
Eu acho que você quer dizer:
unsigned long n;
printf("%lu", n); // unsigned long
ou
long n;
printf("%ld", n); // signed long
Na maioria das plataformas, long
e int
são do mesmo tamanho (32 bits).Ainda assim, não deixa de ter o seu próprio especificador de formato:
long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned
Para 64 bits, você iria querer 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
Frequentemente, quando eu tenho a impressão de valores de 64 bits, acho que é útil para imprimi-los em hex (normalmente com números grandes, eles 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"
irá imprimir:
0x00000000DEADBEEF
Btw, o "tempo" não significa que muito mais (no mainstream x64)."int" é a plataforma padrão int tamanho, normalmente de 32 bits."tempo" é geralmente o mesmo tamanho.No entanto, eles têm diferentes portabilidade semântica em plataformas mais antigas (e modernas plataformas embarcadas!)."longo prazo" é um número de 64 bits e, geralmente, o que o povo quis usar, a menos que eles realmente sabiam o que estavam a fazer a edição de um pedaço de x-plataforma portátil de código.Mesmo assim, eles provavelmente teria 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
Voltar no dia, "int" era 16 bits.Você acha que agora seria de 64 bits, mas não, o que teria causado louco questões de portabilidade.É claro que, mesmo que esta é uma simplificação do arcano e de história rica de verdade.Ver wiki:Inteiro
Depende, se você está se referindo a longo não assinado o caractere de formatação que é "%lu"
.Se você está se referindo ao longo assinado o caractere de formatação que é "%ld"
.
%ld
ver printf
referência cplusplus.com
No caso de você estiver olhando para impressão unsigned long long
como eu estava, use:
unsigned long long n;
printf("%llu", n);
Para todas as outras combinações, eu acredito que você use a tabela de printf manual, tomando a linha e, em seguida, rótulo de coluna para qualquer que seja o tipo que você está tentando imprimir (como eu faço com printf("%llu", n)
acima).
Eu acho que para responder a essa pergunta definitivamente exigiria saber o nome do compilador e a versão que você está usando e a plataforma (tipo de CPU, sistema operacional, etc.) que é para compilar.