Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 andrewrk
andrewrk

Cum a face tu a format un unsigned long long int folosind printf?

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

Ieșire:

Presupun că acest rezultat neașteptat este de la imprimarea de unsigned long long int. Cum a face tu a printf () " o " unsigned long long int?

355 2008-08-05T20:59:29+00:00 12
Programare
c
syntax
printf
format-specifiers
long-long
Comentarii la întrebare (4)
Soluția
John Downey
John Downey
5 august 2008 в 9:02
2008-08-05T21:02:35+00:00
Mai mult
Sursă
Editează
#8413072

Utilizați ll (el-el) timp lung de modificator cu u (unsigned) de conversie. (Funcționează în windows, GNU).

457
0
Comentarii (13)
Nathan Fellman
Nathan Fellman
12 august 2008 в 11:07
2008-08-12T11:07:50+00:00
Mai mult
Sursă
Editează
#8413075

Poate doriți să încercați să utilizați inttypes.h bibliotecă care vă oferă tipuri, cum ar fi int32_t, int64_t, uint64_t etc. Apoi, puteți utiliza macro-uri, cum ar fi:

uint32_t y;

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

Acest lucru este "garantat" pentru a nu oferi aceleași probleme ca timp, unsigned long long etc, din moment ce nu't trebuie să ghicească câți biți sunt în fiecare tip de date.

84
0
Comentarii (6)
Shivam Chauhan
Shivam Chauhan
13 mai 2015 в 5:48
2015-05-13T17:48:33+00:00
Mai mult
Sursă
Editează
#8413080

%d--> pentru int

%u--> pentru unsigned int`

%ld--> pentru long int

%lu--> pentru unsigned long int`

%lld--> pentru long long int

%llu--> pentru unsigned long long int`

62
0
Comentarii (2)
Utilizator anonim
6 septembrie 2009 в 2:26
2009-09-06T14:26:41+00:00
Mai mult
Sursă
Editează
#8413078

Pentru mult timp (sau __int64) folosind MSVS, ar trebui să utilizați %I64d:

time_t b;
...
fprintf(outFile,"%I64d,%I64d\n",a,b);    //I is capital i
38
0
Comentarii (0)
Paul Hargreaves
Paul Hargreaves
9 septembrie 2008 в 7:54
2008-09-09T07:54:37+00:00
Mai mult
Sursă
Editează
#8413076

Asta pentru că %llu nu't de lucru în mod corespunzător sub Windows și %d't se ocupe de numere întregi pe 64 de biți. Am sugerăm să utilizați PRIu64 în loc și te'll găsi o's portabil pentru Linux la fel de bine.

Încearcă asta:

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

Ieșire

36
0
Comentarii (5)
Adam Pierce
Adam Pierce
11 septembrie 2008 в 12:57
2008-09-11T00:57:55+00:00
Mai mult
Sursă
Editează
#8413077

În Linux este %llu și în Windows este %I64u

Deși am găsit-o nu't de lucru în Windows 2000, nu pare a fi un bug acolo!

12
0
Comentarii (5)
 Sandy
Sandy
11 octombrie 2012 в 6:23
2012-10-11T06:23:13+00:00
Mai mult
Sursă
Editează
#8413079

Compila și x64 cu VS2005:

%llu funcționează bine.

8
0
Comentarii (0)
 sparkes
sparkes
5 august 2008 в 9:03
2008-08-05T21:03:07+00:00
Mai mult
Sursă
Editează
#8413073

Non-standard, lucrurile sunt întotdeauna ciudat :)

pentru mult timp parte sub GNU l's "L", " ll " sau "q"

și sub windows cred că's " ll " numai

4
0
Comentarii (0)
 lama12345
lama12345
26 iulie 2015 в 9:57
2015-07-26T09:57:06+00:00
Mai mult
Sursă
Editează
#8413081

Hex:

Ieșire:

4
0
Comentarii (2)
Bernd Elkemann
Bernd Elkemann
17 ianuarie 2016 в 12:27
2016-01-17T12:27:29+00:00
Mai mult
Sursă
Editează
#8413082

În plus față de ceea ce oamenii au scris cu ani în urmă:

  • s-ar putea obține această eroare pe gcc/mingw:

principal.c:30:3: avertisment: necunoscut conversie de tip caracter &#39;l&#39;, in format [-Wformat=]

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

Atunci versiunea de mingw implicit la c99. Adauga acest compilator flag: -std=c99.

2
0
Comentarii (0)
 7vujy0f0hy
7vujy0f0hy
22 martie 2019 в 7:08
2019-03-22T19:08:07+00:00
Mai mult
Sursă
Editează
#8413083

Se pare că nimeni nu a venit cu un multi-platformă* soluție pentru peste un deceniu din [în] anul 2008, așa că trebuie să adăugați mea 😛. Plz upvote. (Glumesc. Nu-mi pasă.)

Soluție: lltoa()

Cum să utilizați:

// ...
char dummy[255];
printf("Over 4 bytes: %s\n", lltoa(5555555555, dummy, 10));
printf("Another one: %s\n", lltoa(15555555555, dummy, 10));

OP exemplu:

#include <stdlib.h> /* lltoa() */

int main() {
    unsigned long long int num = 285212672; // fits in 29 bits
    char dummy[255];
    int normalInt = 5;
    printf("My number is %d bytes wide and its value is %s. "
        "A normal number is %d.\n", 
        sizeof(num), lltoa(num, dummy, 10), normalInt);
    return 0;
}

Spre deosebire de %lld print format string, acesta funcționează pentru mine sub 32-bit GCC pe Windows.

) Ei, aproape* multi-platformă. În MSVC, se pare că ai nevoie _ui64toa() în loc de lltoa().

0
0
Comentarii (0)
 vzczc
vzczc
5 august 2008 в 9:40
2008-08-05T21:40:24+00:00
Mai mult
Sursă
Editează
#8413074

Ei bine, o modalitate este de a compila și x64 cu VS2008

Acest lucru se execută după cum v-ați aștepta:

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

Pentru 32 de biți de cod, trebuie să utilizați corect __int64 specificatorul de format %I64u. Așa devine.

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

Acest cod funcționează pentru ambele 32 și 64 de biți VS compiler.

0
0
Comentarii (1)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire