Domanda

IL printf la funzione accetta un tipo di argomento, ad esempio %d O %i per un signed int.Tuttavia, non vedo nulla per a long valore.

È stato utile?

Soluzione

Mettere un l (lettera minuscola L) direttamente prima dello specificatore.

unsigned long n;
long m;

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

Altri suggerimenti

Penso che tu intenda:

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

O

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

Sulla maggior parte delle piattaforme, long E int hanno la stessa dimensione (32 bit).Tuttavia, ha il proprio identificatore di formato:

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

Per 64 bit, vorresti a long long:

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

Oh, e ovviamente è diverso in Windows:

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

Spesso, quando stampo valori a 64 bit, trovo utile stamparli in formato esadecimale (di solito con numeri così grandi, sono puntatori o campi di bit).

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

stamperà:

0x00000000DEADBEEF

A proposito, "lungo" non significa più molto (sul mainstream x64)."int" è la dimensione int predefinita della piattaforma, in genere 32 bit."lungo" ha solitamente la stessa dimensione.Tuttavia, hanno una semantica di portabilità diversa sulle piattaforme più vecchie (e sulle moderne piattaforme integrate!)."long long" è un numero a 64 bit e di solito ciò che le persone intendevano utilizzare a meno che non sapessero veramente cosa stavano facendo modificando un pezzo di codice portatile della piattaforma x.Anche allora, probabilmente avrebbero invece utilizzato una macro per catturare il significato semantico del tipo (ad esempio 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 

In passato, "int" era di 16 bit.Penseresti che ora sarebbe a 64 bit, ma no, ciò avrebbe causato problemi di portabilità assurdi.Naturalmente anche questa è una semplificazione della verità arcana e ricca di storia.Vedere wiki:Intero

Dipende, se ti riferisci a unsigned long, il carattere di formattazione è "%lu".Se ti riferisci a Signed Long, il carattere di formattazione è "%ld".

Nel caso tu stia cercando di stampare unsigned long long come facevo io, usa:

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

Per tutte le altre combinazioni, credo che tu usi la tabella da il manuale printf, prendendo la riga, quindi l'etichetta della colonna per qualunque tipo tu stia tentando di stampare (come faccio con printf("%llu", n) Sopra).

Penso che per rispondere in modo definitivo a questa domanda sarebbe necessario conoscere il nome e la versione del compilatore che si sta utilizzando e la piattaforma (tipo di CPU, sistema operativo ecc.) per la quale si sta compilando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top