কম্পিউটার টিউটোরিয়াল

C এবং C++-এ 'long' ডেটা টাইপের প্রয়োজনীয়তা কি?


C বা C++-এ পূর্ণসংখ্যা (integer) টাইপের ডেটার জন্য চারটি ভিন্ন ডেটা টাইপ রয়েছে: short, int, long এবং long long। প্রতিটি আলাদা মেমরি স্পেস ধারণ করে। আর্কিটেকচার, অপারেটিং সিস্টেম এবং কম্পাইলার অনুযায়ী আকার ভিন্ন হতে পারে। কখনো int ৪ বাইট নেয়, কখনো ২ বাইট। একইভাবে long-এর আকারও পরিবর্তনশীল। এই কারণে ক্রস কম্পাইলার ব্যবহার করা হয়।

ক্রস কম্পাইলার হলো এমন কম্পাইলার যা বর্তমান প্ল্যাটফর্ম ছাড়া অন্য প্ল্যাটফর্মের জন্য কোড কম্পাইল করতে সক্ষম।

নিচের কোড ৩২-বিট এবং ৬৪-বিট সিস্টেমে কম্পাইল করলে ভিন্ন আউটপুট দেবে।

উদাহরণ

#include <stdio.h>
int main() {
    printf("Size of int : %ld Bytes\n", sizeof(int));
    printf("Size of long : %ld Bytes\n", sizeof(long));
    printf("Size of long long : %ld Bytes", sizeof(long long));
    return 0;
}

আউটপুট (৩২-বিট)

Size of int : 4 Bytes
Size of long : 4 Bytes
Size of long long : 8 Bytes

আউটপুট (৬৪-বিট)

Size of int : 4 Bytes
Size of long : 8 Bytes
Size of long long : 8 Bytes

উপরের উদাহরণ থেকে বোঝা যায় long ডেটা টাইপের আকার কম্পাইলার ও আর্কিটেকচারভিত্তিক ভিন্ন। এর পেছনের কারণ কী?

CPU প্রাইমারি মেমরি (RAM) থেকে মেমরি অ্যাড্রেস রেজিস্টার (MAR) দিয়ে ঠিকানা দিয়ে ডেটা ডাকে। অবস্থান পাওয়ার পর সেটি মেমরি বাফার রেজিস্টার (MBR)-এ ট্রান্সফার হয়। ডেটা CPU রেজিস্টারে সংরক্ষিত হয়। ডেটা বাসের আকার CPU রেজিস্টারের আকার নির্ধারণ করে। ৩২-বিট সিস্টেমে একবারে ৪-বাইট ডেটা ডাকা যায়। ডেটা ৩২-বিটের চেয়ে বড় হলে দুই সাইকেল লাগে। ছোট ডেটার ক্ষেত্রে পার্থক্য নেই।


  1. C++ স্ট্যান্ডার্ড অনুযায়ী int, long টাইপের আকার (Size)

  2. C এবং C++-এ স্ট্রিং লিটারেলের টাইপ কী?

  3. C++-এ প্রিমিটিভ ডেটা টাইপ (Primitive Data Types) কী?

  4. C++-এ ভেরিয়েবল এবং ভেরিয়েবলের টাইপগুলো কী?