Computers · October 14, 2021 0

2. Data Type vs Memory -1

এই পর্বে দেখি ডেটা টাইপের রকমফের বা ডেটা টাইপ কত রকমের হতে পারে:

আচছা তো ডেটা টাইপ এক পন্ডিত কয় দুই রকমের তো আরেক পন্ডিত কয় তিন রকমের! (মহামুশকিল) মুশকিলের কিছু নাই নিচে দেখলেই আমরা বুঝতে পারব যাহা লাউ তাহাই কদু 😃 :

যেসকল পন্ডিত বলেন ডেটা টাইপ দুই রকমের, তাদের ভাষ্যমতে:

আর যেসকল পন্ডিত বলেন ডেটা টাইপ তিন রকমের, তাদের ভাষ্যমতে:

** আগেই কইছি এখানে সেরকম কোনোকিছু না পেলে বা মনের মত না হলে কর্তৃপক্ষ দায়ী নহে, ইহা নিতান্তই কর্তৃপক্ষের কোডিং শেখার জার্নিটা শেয়ার করা হচ্ছে 🙂 ।

আচ্ছা এখন ডেটা টাইপ মডিফায়ার কি সেটা একটু হালকা ভাবে দেখে নেয়া যাক: ইঁনারা ডেটা টাইপদেরকে (built-in/primary) কখনো টেনে লম্বা করে বা চাপ দিয়ে খাটো বানায়ে বা আরো বিভিন্ন ভাবে মডিফাই করেন! আবার sign বা চিহ্নকেও modify করে। যেমন, কখনো negative, positive উভয়কে নিয়েই কাজ করে আবার কখনো negative কে কেয়ারফুল্লি ইগনোর করে শুধু positive value নিয়ে মাতামাতি করে!😃
নিচে উঁনাদের ছক বা chart দেওয়া হল:

পরের পোষ্টে ডেটা টাইপ নিয়ে ডিটেইলস আলোচনা হবে ইনশাল্লাহ।

এখন আসি এত কাহিনী করে এতসব ডেটা টাইপ টেটা টাইপ কেন ব্যবহার করব সেই বিস্তারে:

ভ্যরিয়েবলের শুরুতে আমরা দেখেছি যে ধারন ক্ষমতা অনুসারে পাত্র ছোট, বড় বা মাঝারি ইত্যাদি বিভিন্ন রকমের হতে পারে। উপরে তো দেখলাম কোন ডেটা টাইপের মধ্যে কোন ধরনের ডেটা রাখতে হবে। যেমন চালের বস্তার মধ্যে চালই রাখতে হবে ডালের বস্তার মধ্যে ডাল অর্থাৎ int এর মধ্যে integer টাইপের ডেটা, double এর মধ্যে decimal বা exponent form এর ডেটা রাখতে হবে। অর্থাৎ ডেটা টাইপ আমাদের বলে দেয় যে কেমন ধরনের ডেটা আমরা ভ্যারিয়েবলের মধ্যে রাখব। এখন কথা হল, মনে করি আমার কাছে চাল আছে ১০ কেজি, এই ১০ কেজি চাল রাখার জন্য নিশ্চয় আমি ১০০০ বা ১০,০০০ কেজি চাল ধরে এরকম কোনো বড়সড় পাত্র ব্যবহার করবনা। কেননা তাহলে ওই ১০ কেজির জায়গা টুকুর সদ্ব্যবহার হবে ঠিকি কিন্তু বাকি জায়গাগুলো তো বেমালুম জলে যাবে মানে নষ্ট হবে আরকি। আবার চাল যদি ১০০০ কেজি থাকে তাহলে সেগুলো ১০ কেজি বা ১০০ কেজির পাত্রেও রাখবনা (ধরবেই না তো রাখব কি!) তো এই সমস্ত সমস্যাবলি থেকে মুক্তি পাওয়ার জন্য ছোট, বড় বা মাঝারি বা আরো আকৃতির পাত্রের সৃষ্টি হয়েছে তো ডেটা টাইপও আমাদের এই সমস্ত আকৃতি নির্ধারনে সাহায্য করে। কিরকম?

এইযে এরকম,

int chaler_bosta_1 = 20;

যখনই কম্পাইলার দেখে যে ভ্যারিয়েবলের মধ্যে int টাইপের ডেটা রাখতে চাচ্ছি তখনই সে মানসিক ভাবে (যদিও সে মানুষ না 😆 ) একটা প্রস্তুতি নিয়ে নেয়! আর তা হল int কে দেখেই সে তড়িঘড়ি করে মেমোরির মধ্যে ভ্যারিয়েবলের জন্য ৪ বাইট জায়গা manage করে ফেলে! (আসলে ৪ বাইট নাকি ২ বাইট এখানে একটা ব্যাপার আছে, আর ব্যাপারটা হল কাজটা যে কম্পিউটার ব্যবহার করে করা হচ্ছে সেটার মেমোরির গঠন)

short chaler_bosta_21 = 10;

এখানেও যখন কম্পাইলার দেখে যে ভ্যারিয়েবলের মধ্যে int টাইপের ডেটা রাখতে চাচ্ছি তখনই সে short কে দেখেই মেমোরির মধ্যে ঐ ভ্যারিয়েবলের জন্য ২ বাইট জায়গা manage করে ফেলে! কম্পিউটার ভেদে ১বাইট ও হতে পারে।

double daler_bosta_11 = 1105.50995;

এখানেও তাই, কম্পাইলার যখন দেখে যে ভ্যারিয়েবলের মধ্যে double টাইপের ডেটা রাখতে চাচ্ছি তখনই সে মেমোরির মধ্যে ওই ভ্যারিয়েবলের জন্য বা daler_bosta_11 এর জন্য ৮ বাইট জায়গা manage করে ফেলে! double এর জন্য নির্ধারিত সাইজ float এর ডাবল বা দ্বিগুন।

float daler_bosta_12 = 11.05;

এখানেও তাই, কম্পাইলার যখন দেখে যে ভ্যারিয়েবলের মধ্যে float বা floating টাইপের ডেটা রাখতে চাচ্ছি তখনই সে মেমোরির মধ্যে ওই ভ্যারিয়েবলের জন্য 8 বাইট জায়গা manage করে ফেলে!

আচ্ছা এই মেমোরি কি জিনিষ? কেমন ভাবেই বা সেটার ব্যবহার হয়। আমরা একটা কথা বন্ধুমহলে হরহামেশাই চলতে দেখি:

কিরে নতুন ফোন তো কিনছস RAM কত?

আমার RAM 2 GB! ক্যান? তোর কত?

হে হে আমার 4 GB 😃

কি কস মাম্মা!!

:: এইযে 2 GB বা 4 GB এগুলো কি জিনিস? আর এই RAM ই বা কি?
:- অল্প কথাই RAM (Random Access Memory) হল কম্পিউটার বা মোবাইল ফোনের primary memory বা main memory।
:: হু তো Memory টা কি জিনিস?
:- Memory হল hardware (যাকে দেখা যায় এবং স্পর্শ করা যায় 😆 ) বা physical device যা মানুষের মস্তিষ্কের মত data বা information এর storage হিসেবে কাজ করে (কম্পিউটার Memory নিয়ে Computer Memory তে আলোচনা আছে)। এখন দেখি 2 GB কি, 2 GB জায়গা ই বা কতখানি আর 2 GB এর মধ্যে কতগুলো জিনিসই বা রাখা যায়:

এখানে একটা সমস্যা আছে, আমরা সবাই RAM-কে GB বা Gigabyte এ বললেও আসলে তাকে GiB বা Gibibyte এককে হিসাব করা হয়।

তাহলে এখন খুব মনোযোগ দিয়ে খেয়াল করি:

2 GiB = 2 x 1024 MiB // 1GiB = 1024MiB; // নিচের ছক দেখলেই GiB, MiB, KiB কি জানতে পারব;
= 2 x 1024 x 1024 KiB // 1MiB = 1024KiB;
= 2 x 1024 x 1024 x 1024 Byte (not Bite 🤣 ) // 1KiB = 1024Byte;
= 2 x 1024 x 1024 x 1024 x 8 Bit // 1Byte = 8Bit!;

এখানে একটা প্রশ্ন আছে, সেটা হল MegaByte নাকি MebiByte, GigaByte নাকি GibiByte?
এখানে একটা উত্তরও আছে, সেটা হল নিচের বিশিষ্ট ব্যক্তিদ্বয়ের মতো অনেকে MegaByte , MebiByte অথবা GigaByte, GibiByte কে পরস্পরের synonym বা similar word বলতে চায়:

Synonyms for mebibyte
চিত্র-: ছবিটা এতই ভালোলেগেছে যে কপি পেষ্ট না করে পারা গেল নাহ।

কিন্তু আসলে এরা exactly similar না হলেও প্রায় similar অর্থাৎ এদের মধ্যে সূক্ষ একটা পার্থক্য আছে। পার্থক্যটা এরকম:

এখন আমরা নিশ্চয়ই বুঝতে পারছি, আমরা যে ১০২৪ নিয়ে হিসাব করি ওটা আসলে kibi, mebi, gibi এরকম আর আমরা যে kilo, mega, giga ব্যবহার করি তার হিসাব হবে ১০০০ দিয়ে।

এখন তাহলে আমরা এভাবে হিসাব করে সহজেই কোনো ডিভাইসের কতখানি মেমরি তার কতখানি ব্যবহার হল আর কতখানি থাকল এসব বুঝে ফেলতে পারি। (ইয়াউউউ কি মজা!!)

তো আমরা পেলাম, 2 GiB মানে হল 2 x 1024 x 1024 x 1024 x 8 Bit = 17179869184 Bit জায়গা!

এখন দেখি Bit কি আর ১বিট মানে কতখানি জায়গা:
আচ্ছা, ১বিট কতখানি জায়গা দেখার আগে আমরা চট করে দেখে নেই কম্পিউটার হিসাব করে কিভাবে, আমরা তো খুব আরামে হাতের ১০টা আঙুল ব্যবহার করে ১০ ভিত্তিক (০ থেকে ৯ পর্যন্ত ১০টি অংক) সংখ্যা গননা করি। কম্পিউটার কি করে? সে বাইনারি বা ২ ভিত্তিক (০ আর ১) সংখ্যা গননা করে! হা কেবল মাত্র শূন্য আর এক এই দুইটা ডিজিট ব্যবহার করেই কম্পিউটারের এত বুদ্ধি! 😆 বাকীগুলো ব্যবহার করলে না জানি কি হত!!(আসলে তো কম্পিউটারের নিজের কোনো বুদ্ধিই নেই, মানুষ ওরে যট্টুক ধার দেয় অট্টুক নিয়ে ভাব পিটায়) আচ্ছা তো কম্পিউটার আগেই সবকিছুকে বাইনারিতে নিয়ে নেয় অর্থাৎ ০ আর ১ এ কনভার্ট করে তারপর হিসাব করে। হিসাবটা এরকম:

এক বিট জায়গার মধ্যে ০ অথবা ১ যেকোনো একজন থাকতে পারে অর্থাৎ ১বিট এতই বড় জায়গা যেখানে ০ অথবা ১ এদের যেকোনো একজনকে আটে! তো ১বিট জায়গার মধ্যে দুইটা জিনিস আলাদা ভাবে থাকতে পারে, একটা হল ০ আরেকটা হল ১।
তাহলে দুইটা বিট পাশাপাশি রাখলে ০০,০১,১০,১১ এরকম চারটা আলাদা জিনিস থাকতে পারে আবার তিনটা বিট পাশাপাশি রাখলে ০০০,০০১,০১০,০১১,১০০,১০১,১১০,১১১ এরকম আটটা আলাদা জিনিস থাকতে পারে, এভাবে ৪টা বিট থাকলে ১৬ টা, ৫টা বিট থাকলে ৩২ টা আলাদা জিনিস রাখা যায়!
নিচের ছকটি মনোযোগ দিয়ে দেখি:

Number of BitsDifferent PatternsTotal Patterns
10, 121
200, 01, 10, 1122
3000, 001, 010, 011,
100, 101, 110, 111
23

অর্থাৎ n সংখ্যক বিট পাশাপাশি রাখলে ২n সংখ্যক আলাদা জিনিস রাখা যায়
অর্থাৎ 2GiB = 17179869184Bit আর এতে 217179869184 গুলো জিনিস রাখা যায়!!!(ভাভ রে ভাভ ভাভা যায়!!)

তো ১বিটের মধ্যে ০ অথবা ১ যেকোনো একটিকে অর্থাৎ ২টা জিনিসকে আলাদা ভাবে রাখা যায় আর 1Byte = 8Bit অর্থাৎ ৮টি বিটকে পাশাপাশি রাখলে ১বাইট জায়গা হয় আর এতে সর্বোচ্চ ২ = ২৫৬টি জিনিসকে রাখা যায়একটা letter বা sign character ও ১বাইট জায়গা দখল করেই অবস্থান করে! কারন কম্পিউটার তো A কে চিনেনা, 65 কে character type এ নিলে যে A হয়, সে এই ৬৫ কেও চিনেনা বরং সে শুধু চিনে ৬৫ এর বাইনারি রূপ 1000001 কে! এ জন্যই একটা মাত্র অক্ষর রাখতে আট আটটা বিট লাগে তার!! (এখানে আট আটটা বলতে ৮৮ না কিন্তু 😆 )

চিত্র-: ১বাইট কতখানি আর ১বিটই বা কতখানি তা দেখানো হয়েছে।

নিচের ছকটি দেখলে বিট, বাইটের ধারনা আরো স্পষ্ট হতে পারে:

বিটবাইট
মেমরির সর্বনিম্ন এককপাশাপাশি ৮টি বিট নিয়ে ১বাইট হয়
বিটের মধ্যে ০ অথবা ১ যেকোনো একটি থাকতে পারে১বাইটের মধ্যে যেকোনো একটা letter বা sign character থাকতে পারে

এখন দেখি কম্পিউটার কিভাবে তার বিট বা বাইটের মধ্যে binary পদ্ধিতে আমাদের প্রিয় decimal number কে রাখে:

চিত্র-: ৮৯ কে কম্পিউটার যেভাবে তার মেমরিতে রাখে।

এখন দেখি ১ বাইট বা ৮বিটের সর্বোচ্চ ধারনক্ষমতা:

চিত্র-: ১বাইটের সর্বোচ্চ ধারনক্ষমতা।

এখানে দেখা যাচছে, ৮বিটের সর্বোচ্চ ধারনক্ষমতা ২৫৫ অথচ একটু আগেই দেখলাম ২ = ২৫৬! ব্যপারটা কি!!
ব্যপারটা কিছুই না ৮বিটের সবগুলোতে শূন্য থাকলে টোটাল মান শূন্য হয় তাহলে সবগুলোতে শূন্য থাকলে তখনো একটা প্যাটার্ন হয় তাহলে ১ আর ২৫৫ মিলিয়ে ২৫৬ই হল।

যা হোক শুরু করেছিলাম ডেটা টাইপ আর চলে আসলাম বিট, বাইট, মেমরিতে কি সব হাবিজাবি জিনিসপত্র! মাথানষ্ট!!

আচ্ছা এই পোষ্ট যেহেতু লম্বু হয়ে যাচ্ছে তাইলে ডেটা টাইপের বাঁকী অংশ পরের পোষ্টে দেখি।