printf
समारोह जैसे, एक तर्क प्रकार लेता है %d
या %i
एक के लिए signed int
। हालाँकि, मुझे long
मूल्य के लिए कुछ भी दिखाई नहीं देता है ।
printf
समारोह जैसे, एक तर्क प्रकार लेता है %d
या %i
एक के लिए signed int
। हालाँकि, मुझे long
मूल्य के लिए कुछ भी दिखाई नहीं देता है ।
जवाबों:
l
निर्दिष्ट से पहले सीधे (निचला अक्षर एल) रखो ।
unsigned long n;
long m;
printf("%lu %ld", n, m);
printf("%ld", ULONG_MAX)
मान -1 के रूप में आउटपुट करता है। जब printf("%lu", ULONG_MAX)
तक @Blorgbeard नीचे बताए गए अहस्ताक्षरित लंबे समय तक रहना चाहिए ।
%ld
ओपी प्रश्न के साथ अधिक सामंजस्यपूर्ण होने के लिए बदलना चाहिए ।
%l
ट्रिगरwarning: unknown conversion type character 0x20 in format [-Wformat]
मुझे लगता है तुम्हारा मतलब:
unsigned long n;
printf("%lu", n); // unsigned long
या
long n;
printf("%ld", n); // signed long
अधिकांश प्लेटफार्मों पर, long
और int
समान आकार (32 बिट्स) हैं। फिर भी, इसका अपना प्रारूप विनिर्देशक है:
long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned
64 बिट्स के लिए, आप एक चाहते हैं long long
:
long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned
ओह, और निश्चित रूप से, यह विंडोज में अलग है:
printf("%l64d", n); // signed
printf("%l64u", un); // unsigned
अक्सर, जब मैं 64-बिट मानों को प्रिंट कर रहा होता हूं, तो मुझे उन्हें हेक्स में प्रिंट करना मददगार लगता है (आमतौर पर संख्याओं के साथ जो बड़े होते हैं, वे पॉइंटर्स या बिट फ़ील्ड होते हैं)।
unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"
प्रिंट होगा:
0x00000000DEADBEEF
Btw, "लंबी" का मतलब यह नहीं है कि अब और मुख्यधारा (x64 पर)। "int" प्लेटफ़ॉर्म डिफ़ॉल्ट इंट साइज़ है, आमतौर पर 32 बिट्स। "लॉन्ग" आमतौर पर एक ही आकार का होता है। हालांकि, पुराने प्लेटफार्मों (और आधुनिक एम्बेडेड प्लेटफार्मों!) पर उनके अलग-अलग पोर्टेबिलिटी शब्दार्थ हैं। "लॉन्ग लॉन्ग" एक 64-बिट संख्या है और आमतौर पर लोग इसका उपयोग तब तक करते हैं जब तक कि वे वास्तव में नहीं जानते थे कि वे एक्स-प्लेटफॉर्म पोर्टेबल कोड के एक टुकड़े का संपादन क्या कर रहे थे। फिर भी, उन्होंने संभवतः टाइप के शब्दार्थ अर्थ (जैसे uint64_t) पर कब्जा करने के बजाय एक मैक्रो का उपयोग किया होगा।
char c; // 8 bits
short s; // 16 bits
int i; // 32 bits (on modern platforms)
long l; // 32 bits
long long ll; // 64 bits
वापस दिन में, "int" 16 बिट्स था। आपको लगता है कि यह अब 64 बिट्स होगा, लेकिन नहीं, यह पागल पोर्टेबिलिटी मुद्दों का कारण होगा। बेशक, यहां तक कि यह रहस्यमय और इतिहास-समृद्ध सत्य का सरलीकरण है। विकी देखें : इंटेगर
long
का आकार 32 है" अभी भी सच है। उदाहरण के लिए, मैं ओरेकल लिनक्स x86_64 / amd64 पर हूँ, और साथ nvcc
एक long
8 बाइट है।
%ld
cplusplus.com पर संदर्भ देखेंprintf
यदि आप unsigned long long
जैसा था वैसा प्रिंट करना चाहते हैं , तो:
unsigned long long n;
printf("%llu", n);
अन्य सभी संयोजनों के लिए, मेरा मानना है कि आप पंक्ति को लेते हुए प्रिंटफ़ मैनुअल से तालिका का उपयोग करते हैं , फिर जो भी आप प्रिंट करने की कोशिश कर रहे हैं (जैसा कि मैं printf("%llu", n)
ऊपर करता हूं ) के लिए कॉलम लेबल ।
मुझे लगता है कि इस प्रश्न का उत्तर निश्चित रूप से संकलक के नाम और संस्करण को जानने के लिए आवश्यक होगा, जिसका आप उपयोग कर रहे हैं और मंच (सीपीयू प्रकार, ओएस आदि) जिसे वह संकलित कर रहा है।