Computers · May 4, 2021 4

4. Data Types in Details -2

এই পোষ্ট পড়ার জন্য আঁট ঘাঁট বেধে, খেয়ে দেয়ে পূর্ণমাত্রায় এনার্জি ও পূর্ণমাত্রায় মনোযোগ নিয়ে বসতে হবে।
আচ্ছা এখন আবার ডেটা টাইপে ফিরে আসি।
উপরের ছক গুলোতে বিভিন্ন রকমের ডেটা টাইপ দেখা যাচ্ছে। নিচে তাদেরকে মোটামুটি ভাবে আলোচনা করা হল:

Primary বা Fundamental Data Type: যে সকল ডেটা টাইপ কম্পিউটারের মধ্যে আগে থেকেই built বা নির্মান করা থাকে তাদেরকে Primary বা Fundamental Data Type বলে। এদেরকে built-in বা primitive data type ও বলে। এ সকল ডেটা টাইপ আগে থেকেই নির্ধারন করা থাকে বলে এদেরকে pre-defined ( pre অর্থ পূর্ব আর defined অর্থ নির্ধারিত) বা পূর্বনির্ধারিত ডেটা টাইপ ও বলা হয়। এদেরকে পরিবর্তন করা যায়না অর্থাৎ কোডের মধ্যে এরা অপরিবর্তনীয় ভাবে ব্যবহৃত হয়।
উপরের ছকে আমরা দেখতেই পাচ্ছি কাঁরা কাঁরা প্রাইমারি বা ফান্ডামেন্টাল ডেটা টাইপের সদস্য। সদস্যগন হলেন:
1. Integer
2. Floating
3. Double
4. Character

1. Integer:

* সকল রকমের Integer বা পূর্নসংখ্যাকে store করে। যেমন: -১, -১০০, ০, ২, ৩ ইত্যাদি।
* Integer কে store করার জন্য int ডেটা টাইপ কে ব্যবহার করা হয়।
* এর সাইজ হল ৪ বাইট বা ৪ x ৮ = ৩২বিট অর্থাৎ int কে দেখলেই কম্পাইলার কম্পিউটারের মধ্যে ( ) ভ্যরিয়েবলের জন্য পাশাপাশি ৪ বাইট বা ৩২বিট জায়গা manage করে ফেলে!

* এই ৪ বাইট বা ৩২বিটের মধ্যে ২৩২ = 4,294,967,296 গুলো আলাদা জিনিস রাখা যায় ( n বিটের জন্য 2n)। তো 4,294,967,296 এর অর্ধেক ধনাত্নক আর বাকি অর্ধেক ঋনাত্নক সংখ্যা নিলে range হয় -2147483648 থেকে 2147483647 (জ্বি হা এখানে সমান সংখ্যক ধনাত্নক ও ঋনাত্নক সংখ্যাই আছে (কিন্তু মনে হচ্ছে ধনাত্নক সংখ্যা একটা কম আছে) আসলে মহামান্য বাবাজী “শূন্য” কে ধনাত্নক সংখ্যা হিসেবে গননা করা হয়, এখন তাহলে ধনাত্নক ও ঋনাত্নক সমান হল) আর যদি ঋনাত্নকদের বাদ দিয়ে শুধু ধনাত্নক সংখ্যা নিই তাহলে ০ থেকে 4,294,967,295 পর্যন্ত সংখ্যা রাখা যায়।

size modifier এর উপর ডিপেন্ড করে int আবার short int, long int, long long int হতে পারে।

short int: int এর থেকে ছোট সংখ্যা রাখার জন্য short int ব্যবহার করা হয়। এর সাইজ int এর অর্ধেক অর্থাৎ ২বাইট বা ১৬বিট মাত্র (৩২ বিট কম্পিউটারের ক্ষেত্রে) এতে ২১৬ = ৬৫৫৩৬ বা -32768 থেকে 32767 পর্যন্ত সংখ্যা ধরে।

যেমন, short int chaler_bosta1 = 20;
short chaler_bosta1 = 20; //short আর short int একই কথা।

long int ও long long int: int এর থেকে বড় সংখ্যা রাখার জন্য long int বা long long int ব্যবহার করা হয়। এর সাইজ int এর থেকে বড়। long এর সাইজ কমপক্ষে ৪বাইট আর long long এর সাইজ ৮ বাইট।
এখানে দেখা যাচ্ছে যে int এর সাইজ ৪বাইট আর long এর সাইজ কমপক্ষে ৪বাইট, বলতে আসলে কি বোঝায়?
সি প্লাস প্লাস এর স্ট্যান্ডার্ড নিয়ম অনুসারে int কমপক্ষে ১৬ বিট জায়গা নিবে, আর long কমপক্ষে ৩২ বিট জায়গা নিবে। (এর চেয়ে বেশিও নিতে পারে এটা বুঝা যায়) তাই ১৬ বিটের চেয়ে বড় int ভ্যালু দরকার হলে, এবং সবচেয়ে বেশি ধরণের কম্পিউটারে চালানোর যোগ্য কোড লিখতে চাইলে long int ব্যবহার করাই ভালো।

যেমন, long int chaler_bosta1 = 202020;
বা, long chaler_bosta1 = 202020; //long আর long int একই কথা।

আবার, long long int chaler_bosta1 = 202020202020;
বা, long long chaler_bosta1 = 202020202020; //long long আর long long int ও একই কথা।

sign modifier এর উপর ডিপেন্ড করে int আবার signed short, unsigned short, signed int, unsigned int, signed long, unsigned long, signed long long, unsigned long long হতে পারে!! (কেউ আমারে মাইরালা)
signed এর সবগুলো নরমাল short, int, long, long long এর মতো একই সাইজ এবং একই range, unsigned এরও সাইজ একই কিন্তু নরমাল short, int, long, long long আর signed short, int, long, long long সবাই তাদের সাইজ বা মেমরির মধ্যে শুন্যসহ ঋনাত্নক ও ধনাত্নক সংখ্যা রাখতে পারে কিন্ত unsigned ঋনাত্নক সংখ্যা দেরকে মোটে দেখতে পারেনা unsigned short, int, long, long long এরা সবাই শুধুমাত্র ধনাত্নক সংখ্যাদেরকে রাখে। সাইজের পুরোটা জুড়ে শুধু ধনাত্নক সংখ্যা রাখে জন্য এরা সর্বোচ্চ সংখ্যক ধনাত্নক সংখ্যা রাখতে পারে।

এখানে মূল ঘটনাটা হল: ১বাইট বা ৮টি বিটের একেবারে প্রথম বিট কে কম্পাইলার sign বা চিহ্নের জন্য রেখে দেয়। বাকি ৭টা বিটে stored সংখ্যা রাখে। তো আমরা যখন variable এর মধ্যে int বা float বা যেকোনো টাইপের ধনাত্নক সংখ্যা রাখি কম্পাইলার তখন প্রথম বিটের মধ্যে শুন্য রাখে অর্থাৎ positive number এর জন্য ০ আর negative number এর জন্য ১ রাখে আর বাকি ৭টা বিটে ২ = ১২৮ অর্থাৎ negative হলে 128 আর positive হলে শুন্যসহ ১২৭ পর্যন্ত সংখ্যা রাখে। এজন্য এর range -128 থেকে শুন্যসহ 127 পর্যন্ত। এই হিসাব int বা signed int বা যেকোনো signed ডেটা টাইপের জন্য সত্য (signed অর্থই হল চিহ্ন সহ) আর unsigned ডেটা টাইপের ক্ষেত্রে চিহ্নের জন্য কোনো বিট বা জায়গা রাখার দরকার হয় না। যখন unsigned কে declare করতেছি তখন কম্পাইলার unsigned কে দেখেই বুঝতেছে যে sign বা চিহ্নের জন্য জায়গা রাখার কোনো দরকার নেই (unsigned অর্থই হল চিহ্ন ছাড়া) unsigned এর মধ্যে সবগুলোই positive value থাকে। তখন ২ = ২৫৬ অর্থাৎ এর range বা সীমা হয় ০ থেকে ২৫৫ পর্যন্ত।

ঘোষনা: খুব জরুরি অবস্থায় না পড়লে unsigned টাইপকে কে avoid করাই ভাল।

2. Floating:
* সকল রকমের Floating বা ভগ্নাংশকে store করে। যেমন: -১.৫, -১০.০৭, ২.০০, ৩.৭৮ ইত্যাদি।
* ভগ্নাংশকে কে store করার জন্য float ডেটা টাইপ কে ব্যবহার করা হয়।
* float ডেটা টাইপের সাইজ হল ৪ বাইট বা ৪ x ৮ = ৩২বিট।
float এর জন্য সমবেদনা কারন ওর কোনো short বা long এরম কোনো modifier নাই।

3. Double:
Double ও Floating এর মত, সকল রকমের Decimal বা ভগ্নাংশ এবং exponent form এর ডেটাকে store করে।
* এদেরকে store করার জন্য double ডেটা টাইপ কে ব্যবহার করা হয়।
double ডেটা টাইপের সাইজ হল ৮ বাইট বা ৮ x ৮ = ৬৪বিট। (double এর সাইজ কিন্তু floatএর দ্বিগুন!!)
*

Double: এর জন্য modifier কেবলমাত্র long double হতে পারে, আর এর সাইজ ১০বাইট!
যেমন,

long double c = 0.333333333333333333L;

এখানে একটি বিশেষ ঘোষনা আছে:
এইযে int এর সাইজ ৪বাইট, float এর ৪বাইট, double এর ৮বাইট এর অর্থ এটা না যে int এর সাইজ সবসময়ই ৪বাইট হবে বা double এর সাইজ ৮ বাইট ফিক্সড বরং এগুলো কত বিটের কম্পিউটার ব্যবহার করা হচ্ছে তার উপর নির্ভর করে। এখানে সকল ডেটা টাইপের সাইজের জন্য ৩২ বিট কম্পিউটারকে base করে হিসাব করা হয়েছে। ৬৪ বিটের কম্পিউটার এর জন্য সকল সাইজ গুলো ডাবল বা দ্বিগুন হবে আর ১৬ বিট হলে সব অর্ধেকে নেমে আসবে।
(ঘোষনাটি শেষ হল)

4. Character:
* যেকোনো একটা letter বা sign বা Character কে store করে।
* Character টাইপের ডেটাকে store করার জন্য char ডেটা টাইপ কে ব্যবহার করা হয়।
char ডেটা টাইপের সাইজ হল 1 বাইট বা ১ x ৮ = ৮ বিট।

char এর জন্য short, long নাই কিন্তু signed বা unsigned বা plain char হতে পারে (কম্পাইলারের উপর ডিপেন্ড করে)

এখন দেখি Secondary Data Type: Secondary data type মূলত Primary Data Type থেকেই এসেছে।

Arrays: Arrays হল একই টাইপের ডেটার সংকলন বা সমাবেশ। অর্থাৎ এর মধ্যে একই টাইপের ডেটা থাকে। যেমন, যদি আমরা integer type এর Array ডিক্ল্যয়ার করি তাহলে এর মধ্যে রাখা সমস্ত ডেটাই integer type এর হতে হবে। আর যদি character type এর Array ডিক্ল্যয়ার করি তাহলে সে কেবল character type এর ডেটাই রাখতে পারবে। এভাবে আমরা ঠিক যেই টাইপের Array ডিক্ল্যয়ার করব তার মধ্যে ঠিক সেই টাইপের ডেটাই রাখতে পারব।

উপরের ঝুড়ি ভর্তি আমটি হল Array থুক্কু আম ভর্তি ঝুড়িটি হল Array