c Printf के लिए तर्क क्या है जो लंबे समय तक प्रारूपित करता है?




(7)

मुझे लगता है कि इस सवाल का जवाब देने के लिए निश्चित रूप से आपके द्वारा उपयोग किए जा रहे कंपाइलर नाम और संस्करण और प्लेटफॉर्म (सीपीयू प्रकार, ओएस इत्यादि) को जानने की आवश्यकता होगी, जिसके लिए यह संकलन कर रहा है।

printf फ़ंक्शन एक तर्क प्रकार लेता है, जैसे एक signed int लिए %d या %i । हालांकि, मुझे एक long मूल्य के लिए कुछ भी नहीं दिख रहा है।


यदि आप unsigned long long प्रिंट करना चाहते हैं, तो इसका उपयोग करें:

unsigned long long n;
printf("%llu", n);

अन्य सभी संयोजनों के लिए, मेरा मानना ​​है कि आप प्रिंटफ मैनुअल से तालिका का उपयोग करते हैं, पंक्ति लेते हैं, फिर कॉलम लेबल जिसे आप मुद्रित करने की कोशिश कर रहे हैं (जैसा कि मैं printf("%llu", n) साथ करता हूं)।


यह निर्भर करता है, यदि आप अनुक्रमित लंबे समय तक संदर्भित कर रहे हैं तो स्वरूपण वर्ण "%lu" । यदि आप लंबे समय तक हस्ताक्षर करने का जिक्र कर रहे हैं तो स्वरूपण वर्ण "%ld"


मुझे लगता है तुम्हारा मतलब:

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

बीटीडब्ल्यू, "लम्बा" का मतलब अब और अधिक नहीं है (मुख्यधारा x64 पर)। "int" प्लेटफ़ॉर्म डिफ़ॉल्ट 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 बिट्स होगा, लेकिन नहीं, इससे पागल पोर्टेबिलिटी के मुद्दे सामने आएंगे। बेशक, यहां तक ​​कि यह आर्केन और इतिहास समृद्ध सत्य का एक सरलीकरण है। wiki:Integer देखें wiki:Integer



विनिर्देशक से पहले एक l (लोअरकेड अक्षर एल) डालें।

unsigned long n;
long m;

printf("%lu %ld", n, m);






printf