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)
নীচে @ ব্লগারবার্ড দ্বারা বর্ণিত হিসাবে স্বাক্ষরবিহীন দীর্ঘতর হওয়া উচিত ।
%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
প্রায়শই, যখন আমি -৪-বিট মানগুলি মুদ্রণ করি তখন আমি এগুলিকে হেক্সে মুদ্রণ করা সহায়ক মনে করি (সাধারণত যে সংখ্যাগুলি বড়, তারা পয়েন্টার বা বিট ক্ষেত্র হয়)।
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 এ)। "ইনট" হল প্ল্যাটফর্মের ডিফল্ট ইনট আকার, সাধারণত 32 বিট। "দীর্ঘ" সাধারণত একই আকারের হয়। তবে তাদের পুরানো প্ল্যাটফর্মগুলিতে (এবং আধুনিক এমবেডেড প্ল্যাটফর্মগুলি!) আলাদা আলাদা পোর্টেবিলিটি শব্দার্থক শব্দ রয়েছে। "দীর্ঘ দীর্ঘ" হ'ল একটি -৪-বিট সংখ্যা এবং সাধারণত লোকেরা কী বোঝাতে চেয়েছিল যদি না তারা সত্যিই বুঝতে না পারে যে তারা এক্স-প্ল্যাটফর্মের পোর্টেবল কোডের কোনও অংশ সম্পাদনা করছে। তারপরেও তারা সম্ভবত ম্যাক্রোর পরিবর্তে এই ধরণের অর্থের অর্থ (যেমন 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
দিন ফিরে, "ইনট" 16 বিট ছিল। আপনি এখন ভাবেন যে এটি এখন be৪ বিট হবে তবে না, এটি পাগল বহনযোগ্যতার সমস্যার কারণ হতে পারে। অবশ্যই এটি ত্রৈমাসিক এবং ইতিহাস সমৃদ্ধ সত্যের সরলীকরণ। উইকি দেখুন : পূর্ণসংখ্যা
long
আকার 32 এর আকারের" এখনও সত্য। যেমন, আমি ওরাকল লিনাক্স, x86_64 / AMD64 উপর আছি, এবং nvcc
একটি long
8 বাইট।
%ld
সিপিএলস্প্লস.কম এ রেফারেন্স দেখুনprintf
আপনি unsigned long long
যেমনটি মুদ্রণ করতে চাইছেন তেমন ব্যবহার করুন:
unsigned long long n;
printf("%llu", n);
অন্যান্য সমস্ত সংমিশ্রণের জন্য, আমি বিশ্বাস করি যে আপনি প্রিন্টফ ম্যানুয়াল থেকে সারণীটি সারিটি ব্যবহার করেন, তারপরে আপনি যে ধরণের প্রিন্ট করার চেষ্টা করছেন তার জন্য কলাম লেবেল (যেমন আমি printf("%llu", n)
উপরের সাথে করি )।
আমি মনে করি এই প্রশ্নের উত্তর দেওয়ার জন্য অবশ্যই আপনি যে সংকলকটির নাম এবং সংস্করণটি ব্যবহার করছেন তা এবং প্ল্যাটফর্মটি (সিপিইউ টাইপ, ওএস ইত্যাদি) যা এটি সংকলন করছে তা জেনে রাখা দরকার।