Wie printf Sie einen unsigned long long int (der Formatangabe für unsigned long long int)?

stimmen
286
#include <stdio.h>
int main() {
    unsigned long long int num = 285212672; //FYI: fits in 29 bits
    int normalInt = 5;
    printf(My number is %d bytes wide and its value is %ul. A normal number is %d.\n, sizeof(num), num, normalInt);
    return 0;
}

Ausgabe:

My number is 8 bytes wide and its value is 285212672l. A normal number is 0.

Ich nehme an, das unerwartete Ergebnis von Druck das ist unsigned long long int. Wie wollen Sie printf()Benutzer unsigned long long int?

Veröffentlicht am 05/08/2008 um 21:59
quelle vom benutzer
In anderen Sprachen...                            


11 antworten

stimmen
380

Verwenden Sie das ll (el-el) lang-lang-Modifikator mit der u (unsigned) Umwandlung. (Funktioniert in Fenstern, GNU).

printf("%llu", 285212672);
Beantwortet am 05/08/2008 um 22:02
quelle vom benutzer

stimmen
71

Möglicherweise möchten Sie mit der inttypes.h Bibliothek , um zu versuchen , die Sie Typen wie gibt int32_t, int64_t, uint64_tetc. Sie können dann ihre Makros verwenden wie zum Beispiel:

uint64_t x;
uint32_t y;

printf("x: %"PRId64", y: %"PRId32"\n", x, y);

Dies wird als „garantiert“ nicht geben Ihnen die gleichen Probleme wie long, unsigned long longetc, da Sie nicht erraten, wie viele Bits in jedem Datentyp sind.

Beantwortet am 12/08/2008 um 12:07
quelle vom benutzer

stimmen
34

Für lange lange (oder __int64) mit MSVS, sollten Sie verwenden% I64d:

__int64 a;
time_t b;
...
fprintf(outFile,"%I64d,%I64d\n",a,b);    //I is capital i
Beantwortet am 06/09/2009 um 15:26
quelle vom benutzer

stimmen
30

%d-> für int

%u-> für unsigned int

%ld-> für long int

%lu-> für unsigned long int

%lld-> für long long int

%llu-> für unsigned long long int

Beantwortet am 13/05/2015 um 17:48
quelle vom benutzer

stimmen
29

Das ist, weil% llu nicht ordnungsgemäß unter Windows funktioniert und% d kann nicht 64-Bit-Integer behandeln. Ich schlage vor, mit PRIu64 statt, und Sie werden es auf Linux als auch tragbare finden.

Versuchen Sie stattdessen:

#include <stdio.h>
#include <inttypes.h>

int main() {
    unsigned long long int num = 285212672; //FYI: fits in 29 bits
    int normalInt = 5;
    /* NOTE: PRIu64 is a preprocessor macro and thus should go outside the quoted string. */
    printf("My number is %d bytes wide and its value is %"PRIu64". A normal number is %d.\n", sizeof(num), num, normalInt);
    return 0;
}

Ausgabe

My number is 8 bytes wide and its value is 285212672. A normal number is 5.
Beantwortet am 09/09/2008 um 08:54
quelle vom benutzer

stimmen
9

In Linux ist %lluund in Windows ist es%I64u

Obwohl ich gefunden habe, es nicht in Windows 2000 funktioniert, scheint es ein Fehler zu sein!

Beantwortet am 11/09/2008 um 01:57
quelle vom benutzer

stimmen
8

Kompilieren Sie es als x64 mit VS2005:

% Llu funktioniert gut.

Beantwortet am 11/10/2012 um 07:23
quelle vom benutzer

stimmen
4

Verhexen:

printf("64bit: %llp", 0xffffffffffffffff);

Ausgabe:

64bit: FFFFFFFFFFFFFFFF
Beantwortet am 26/07/2015 um 09:57
quelle vom benutzer

stimmen
4

Nicht-Standard-Dinge sind immer seltsam :)

für den langen langen Abschnitt unter GNU ist es L, lloderq

und unter Windows Ich glaube , es ist llnur

Beantwortet am 05/08/2008 um 22:03
quelle vom benutzer

stimmen
2

Zusätzlich zu dem, was vor Menschen Jahren schrieben:

  • Sie können diesen Fehler auf gcc / mingw erhalten:

main.c:30:3: warning: unknown conversion type character 'l' in format [-Wformat=]

printf("%llu\n", k);

Dann Ihre Version von mingw nicht standardmäßig c99. Fügen Sie diesen Compiler - Flag: -std=c99.

Beantwortet am 17/01/2016 um 12:27
quelle vom benutzer

stimmen
1

Nun, eine Möglichkeit ist es, als x64 zu kompilieren mit VS2008

Dies läuft wie man es erwarten würde:

int normalInt = 5; 
unsigned long long int num=285212672;
printf(
    "My number is %d bytes wide and its value is %ul. 
    A normal number is %d \n", 
    sizeof(num), 
    num, 
    normalInt);

Für 32-Bit-Code, müssen wir das richtige __int64 Formatbezeichner% I64u verwenden. So wird es.

int normalInt = 5; 
unsigned __int64 num=285212672;
printf(
    "My number is %d bytes wide and its value is %I64u. 
    A normal number is %d", 
    sizeof(num),
    num, normalInt);

Dieser Code funktioniert sowohl für 32- als auch 64-Bit-VS-Compiler.

Beantwortet am 05/08/2008 um 22:40
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more