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.

Foi útil?

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".

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top