Πώς printf μια unsigned long long int (ο προσδιοριστής μορφή για unsigned long long int);

ψήφοι
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;
}

Παραγωγή:

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

Υποθέτω ότι αυτό το μη αναμενόμενο αποτέλεσμα είναι από την εκτύπωση του unsigned long long int. Πώς να κάνετε printf()ένα unsigned long long int;

Δημοσιεύθηκε 05/08/2008 στις 21:59
πηγή χρήστη
Σε άλλες γλώσσες...                            


11 απαντήσεις

ψήφοι
380

Χρησιμοποιήστε το LL (el-el) πολύ-πολύ τροποποιητή με το u (χωρίς πρόσημο) μετατροπή. (Έργα στα παράθυρα, GNU).

printf("%llu", 285212672);
Απαντήθηκε 05/08/2008 στις 22:02
πηγή χρήστη

ψήφοι
71

Μπορεί να θέλετε να δοκιμάστε να χρησιμοποιήσετε το inttypes.h βιβλιοθήκη που σας δίνει τύπους όπως int32_t, int64_t, uint64_tκ.λπ. Μπορείτε να χρησιμοποιήσετε μακροεντολές της, όπως:

uint64_t x;
uint32_t y;

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

Αυτό είναι «εγγυημένη» για να μην σας δώσει το ίδιο πρόβλημα όπως long, unsigned long longκλπ, δεδομένου ότι δεν χρειάζεται να μαντέψει πόσα bits είναι σε κάθε τύπο δεδομένων.

Απαντήθηκε 12/08/2008 στις 12:07
πηγή χρήστη

ψήφοι
34

Για πολύ καιρό (ή __int64) χρησιμοποιώντας ΕΑΙ, θα πρέπει να χρησιμοποιήσετε% I64d:

__int64 a;
time_t b;
...
fprintf(outFile,"%I64d,%I64d\n",a,b);    //I is capital i
Απαντήθηκε 06/09/2009 στις 15:26
πηγή χρήστη

ψήφοι
30

%d-> για int

%u-> για unsigned int

%ld-> για long int

%lu-> για unsigned long int

%lld-> για long long int

%llu-> για unsigned long long int

Απαντήθηκε 13/05/2015 στις 17:48
πηγή χρήστη

ψήφοι
29

Αυτό συμβαίνει επειδή% LLU δεν λειτουργεί σωστά σε περιβάλλον Windows και% d δεν μπορεί να χειριστεί 64 ακέραιοι bit. Προτείνω τη χρήση PRIu64 αντ 'αυτού και θα βρείτε ότι είναι φορητή στο Linux, καθώς και.

Δοκιμάστε αυτό αντ 'αυτού:

#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;
}

Παραγωγή

My number is 8 bytes wide and its value is 285212672. A normal number is 5.
Απαντήθηκε 09/09/2008 στις 08:54
πηγή χρήστη

ψήφοι
9

Στο Linux είναι %lluκαι στα Windows είναι%I64u

Αν και έχω διαπιστώσει ότι δεν λειτουργεί στα Windows 2000, φαίνεται να υπάρχει ένα bug υπάρχει εκεί!

Απαντήθηκε 11/09/2008 στις 01:57
πηγή χρήστη

ψήφοι
8

Μεταφράσετε ως x64 με VS2005:

% LLU λειτουργεί καλά.

Απαντήθηκε 11/10/2012 στις 07:23
πηγή χρήστη

ψήφοι
4

Μαγεύω:

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

Παραγωγή:

64bit: FFFFFFFFFFFFFFFF
Απαντήθηκε 26/07/2015 στις 09:57
πηγή χρήστη

ψήφοι
4

Μη στάνταρ πράγματα είναι πάντα περίεργα :)

για το πολύ μεγάλο τμήμα σύμφωνα με την GNU είναι L, llήq

και κάτω από τα παράθυρα πιστεύω ότι είναι llμόνο

Απαντήθηκε 05/08/2008 στις 22:03
πηγή χρήστη

ψήφοι
2

Εκτός από αυτό που έγραψε ο λαός χρόνια πριν:

  • μπορείτε να πάρετε αυτό το σφάλμα στο gcc / MinGW:

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

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

Στη συνέχεια, η έκδοση του MinGW δεν προεπιλογή C99. Προσθέστε αυτή τη σημαία compiler: -std=c99.

Απαντήθηκε 17/01/2016 στις 12:27
πηγή χρήστη

ψήφοι
1

Λοιπόν, ένας τρόπος είναι να το υπολογίσουν ως x64 με VS2008

Αυτό λειτουργεί όπως θα περίμενε κανείς:

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);

Για 32 bit κώδικα, πρέπει να χρησιμοποιήσουμε τη σωστή μορφή __int64 προσδιοριστή% I64u. Έτσι γίνεται.

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);

Αυτός ο κωδικός λειτουργεί για δύο 32 και 64 bit VS compiler.

Απαντήθηκε 05/08/2008 στις 22:40
πηγή χρήστη

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