printf
Funkcji zajmuje typu parametru, jak %d
i %i
dla signed int
. Jednak nie widzę nic dla long
wartości.
c
printf
long-integer
Thomas Owens
źródło
źródło
Odpowiedzi:
Umieść
l
(małą literę L) bezpośrednio przed specyfikatorem.źródło
printf("%ld", ULONG_MAX)
zwraca wartość jako -1. Powinny pozostaćprintf("%lu", ULONG_MAX)
bez znaku tak długo, jak opisano poniżej przez @Blorgbeard.%ld
, aby było bardziej harmonijne z pytaniem OP.%l
wyzwalawarning: unknown conversion type character 0x20 in format [-Wformat]
Myślę, że chodzi Ci o:
lub
źródło
W większości platformach
long
iint
są tej samej wielkości (32 bity). Mimo to ma swój własny specyfikator formatu:Dla 64 bitów potrzebujesz
long long
:No i oczywiście jest inaczej w systemie Windows:
Często, gdy drukuję wartości 64-bitowe, pomocne jest wydrukowanie ich w systemie szesnastkowym (zwykle z tak dużymi liczbami, są to wskaźniki lub pola bitowe).
wydrukuje:
Btw, „long” nie znaczy już tyle (na głównym nurcie x64). „int” to domyślny rozmiar int platformy, zwykle 32 bity. „długi” ma zwykle ten sam rozmiar. Mają jednak inną semantykę przenośności na starszych platformach (i nowoczesnych platformach wbudowanych!). „long long” to liczba 64-bitowa i zwykle to, co ludzie zamierzali użyć, chyba że naprawdę wiedzieli, co robią, edytując kawałek przenośnego kodu na platformę x. Nawet wtedy prawdopodobnie użyliby makra, aby uchwycić semantyczne znaczenie tego typu (np. Uint64_t).
W tamtym czasie „int” miał 16 bitów. Można by pomyśleć, że będzie to teraz 64 bity, ale nie, to spowodowałoby szalone problemy z przenośnością. Oczywiście nawet to jest uproszczeniem tajemnej i bogatej historii prawdy. Zobacz wiki: Liczba całkowita
źródło
long
rozmiar 32” jest nadal prawdą. Na przykład, jestem na Oracle Linux x86_64 / amd64 iz wynosi 8 bajtów.nvcc
long
To zależy, jeśli masz na myśli niepodpisany długi znak formatowania
"%lu"
. Jeśli masz na myśli podpisany długi znak formatowania to"%ld"
.źródło
%ld
patrzprintf
odnośnik na cplusplus.comźródło
Jeśli chcesz wydrukować
unsigned long long
tak jak ja, użyj:Wydaje mi się, że we wszystkich innych kombinacjach używasz tabeli z instrukcji printf , biorąc wiersz, a następnie etykietę kolumny dla dowolnego typu, który próbujesz wydrukować (tak jak
printf("%llu", n)
powyżej).źródło
Myślę, że ostateczne udzielenie odpowiedzi na to pytanie wymagałoby znajomości nazwy i wersji kompilatora, której używasz, oraz platformy (typ procesora, system operacyjny itp.), Dla której się kompiluje.
źródło