Jaki jest argument dla printf, który formatuje długi?
Funkcja printf
pobiera typ argumentu, taki jak %d
lub %i
dla signed int
. Jednak nie widzę nic dla long
wartość.
7 answers
Umieść l
(mała litera L) bezpośrednio przed specyfikatorem.
unsigned long n;
long m;
printf("%lu %ld", n, m);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-01 01:20:13
Myślę, że masz na myśli:
unsigned long n;
printf("%lu", n); // unsigned long
Lub
long n;
printf("%ld", n); // signed long
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-17 19:56:52
Na większości platform, long
i int
są tego samego rozmiaru (32 bity). Mimo to ma swój własny specyfik formatu:
long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned
Dla 64 bitów, chcesz long long
:
long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned
No i oczywiście w Windows jest inaczej:
printf("%l64d", n); // signed
printf("%l64u", un); // unsigned
Często, gdy drukuję wartości 64-bitowe, pomocne jest drukowanie ich w formacie hex (zwykle z tak dużymi liczbami, są to wskaźniki lub pola bitowe).
unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"
Wydrukuje:
0x00000000DEADBEEF
Btw, "długi" już tyle nie znaczy (na mainstreamie x64). "int" to domyślny rozmiar int platformy, Zwykle 32 bity. "długi" jest zwykle tego samego rozmiaru. Mają jednak inną semantykę przenośności na starszych platformach (i nowoczesnych platformach wbudowanych!). "long long" to 64-bitowy numer i zwykle to, czego ludzie chcieli użyć, chyba że naprawdę wiedzieli, co robią edytując kawałek przenośnego kodu x-platform. Nawet wtedy prawdopodobnie użyliby makra zamiast uchwycić znaczenie semantyczne typu (np. 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
Kiedyś, " int " było 16 bitów. Można by pomyśleć, że teraz będzie to 64 bity, ale nie, to spowodowałoby szalone problemy z przenośnością. Oczywiście nawet to jest uproszczenie tajemnej i bogatej w historię prawdy. Zobacz wiki:Integer
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-07 19:46:35
To zależy, jeśli odnosisz się do unsigned long, znak formatujący to "%lu"
. Jeśli chodzi o signed long, znak formatujący to "%ld"
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-06 02:20:44
%ld
Zobacz też printf
odniesienie na cplusplus.com
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-17 19:57:56
W przypadku, gdy chcesz wydrukować unsigned long long
tak jak ja, użyj:
unsigned long long n;
printf("%llu", n);
Dla wszystkich innych kombinacji, wierzę, że używasz tabeli z instrukcji printf , biorąc Etykietę wiersza, a następnie kolumny dla dowolnego typu, który próbujesz wydrukować(jak to robię z printf("%llu", n)
powyżej).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-28 19:24:46
Myślę, że definitywna odpowiedź na to pytanie wymagałaby znajomości nazwy kompilatora i wersji, z której korzystasz oraz platformy (Typ procesora, SYSTEM OPERACYJNY itp.), dla którego jest kompilowany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 19:20:35