Ce sunt specificatorii de format %ul și %lu?
Pentru început, este important să rețineți că ambele %ul și %lu specificatorii de format sunt folosite la programarea în C și ambele reprezintă tipuri de date lungi nesemnate. Cu toate acestea, poziția literelor „ l ' și ' în ” diferă. Scrisorile ' în ' și ' l „ înseamnă „ nesemnat ' și ' lung ”, respectiv. Tipul de argument dorit este determinat de succesiunea acestor litere. „ %în ” specifică că caracterul sau șirul căruia i se aplică are tipul de date nesemnat int in timp ce ' %l ” partea specifică că este un tip de date lung nesemnat. Cu alte cuvinte, %ul indică un tip de date lung nesemnat while %lu indică același lucru, dar cu un „ suplimentar lung ” modificator de dimensiune.
Drept urmare, dacă utilizați %ul pe o variabilă care nu este un întreg lung fără semn, puteți obține un sufix l la sfârşitul ieşirii. Când încercați să imprimați o variabilă cu un anumit tip de date, este esențial să utilizați specificatorul de format corespunzător.
Iată un exemplu de cod care arată cum %ul și %lu specificatorii de format diferă:
%ul Format Specificator în C
#includeint principal ( ) {
unsigned long int i = 1234567890 ;
printf ( „Utilizarea specificatorului de format %%ul: %ul \n ' , i ) ;
întoarcere 0 ;
}
În codul de mai sus, definim variabila i ca un întreg lung fără semn și inițializați-l la 1234567890 . The printf comanda apoi folosește %ul specificatorul de format pentru a tipări valoarea i . Pentru că doar %în este componenta majoră a specificatorului şi l este în afara formatului, va tipări numărul cu sufixul l la sfârșitul.
Ieșire
Specificator de format %lu în C
#includeint principal ( ) {
unsigned long int i = 1234567890 ;
printf ( „Utilizarea specificatorului de format %%lu: %lu \n ' , i ) ;
întoarcere 0 ;
}
În codul de mai sus, variabila întreg lung fără semn i este declarată și inițializată la 1234567890 și apoi tipărită folosind %lu specificatorul de format.
Ieșire
Diferențele dintre %ul și %lu Specificatorul de format în C
1: Gama de valori
Principala diferență între %ul și %lu are de-a face cu intervalul de valori pe care se așteaptă să le reprezinte. La programarea în C, tipul de date lung nesemnat utilizează un format diferit de celelalte tipuri de date, inclusiv tipul de date int nesemnat. Un int pe 32 de biți necesită doar 32 de biți de memorie pentru a-și stoca valoarea, în timp ce un lung nesemnat necesită 64 de biți pentru același tip de date, având astfel un interval mai semnificativ decât un int. Aceasta înseamnă că %ul va accepta valori de la 0 la +2^32-1, în timp ce %lu specificatorul va accepta valori de la 0 la +2^64-1.
2: Precizie
Există, de asemenea, o diferență în precizia valorilor pe care se așteaptă să le reprezinte. Cu %ul specificator, un programator este capabil să reprezinte doar valori de până la 2^32-1, în timp ce %lu specificatorul poate reprezenta valori de până la 2^64-1. Deși acest lucru ar putea să nu pară o mare diferență la prima vedere, poate afecta indirect acuratețea rezultatelor. Un program conceput pentru a stoca o valoare care are, de exemplu, un interval de +2^64 va avea erori atunci când se utilizează %ul specificatorii deoarece nu vor putea stoca datele în formatul dorit, ducând astfel la o pierdere a preciziei.
3: Memorie
In cele din urma, %ul și %lu diferă de asemenea în utilizarea memoriei. The %ul specificatorul necesită 32 de biți de memorie pentru date, în timp ce %lu necesită 64 de biți pentru același tip de date, adică %lu ocupă aproximativ de două ori mai multă memorie decât %ul . Aceasta ar putea să nu pară o diferență uriașă în programele mici, la scară mică, dar acest lucru poate deveni rapid de negestionat, deoarece utilizarea memoriei unui program crește adesea odată cu complexitatea, ceea ce înseamnă că %lu nu este ideal atunci când aveți de-a face cu aplicații la scară largă.
4: Format
Este important să înțelegeți formatul exact al ieșirii atunci când utilizați %ul sau %lu . Mai exact, cel %ul specificatorul de format scoate întotdeauna numărul întreg ca valoare hexazecimală de 8 cifre în timp ce %lu Specificatorul de format scoate numărul întreg ca valoare zecimală de 8 cifre. Aceasta înseamnă că, dacă un număr întreg este reprezentat ca valoare hexazecimală, acesta ar trebui tipărit ca a %ul în timp ce dacă întregul este reprezentat ca valoare zecimală, ar trebui să fie tipărit ca a %lu .
Gânduri finale
Este important să înțelegeți diferențele exacte dintre %ul și %lu specificatorii de format atunci când lucrați cu limbajul C. Deși pot părea similare, diferența principală este aceea %ul formatul necesită un parametru întreg lung nesemnat, în timp ce %lu formatul așteaptă o intrare lungă de numere întregi fără semn. The %ul specificatorul de format scoate întotdeauna numărul întreg ca valoare hexazecimală de 8 cifre în timp ce %lu Specificatorul de format scoate numărul întreg ca valoare zecimală de 8 cifre. În cele din urmă, este important de reținut că %ul și %lu specificatorii de format pot fi utilizați numai atunci când lucrați cu variabile care au tipul „ lung ’.