এটি যেভাবে ডেটা সংরক্ষণ করা হয় এটি একটি বিষয়। স্যামের সাথে আপনার মিথস্ক্রিয়াটি আরও ভাল তুলনা করতে পারে যদি আপনি জিজ্ঞাসা করেন যে আপনি এটি লিখতে পারেন তবে কেবল আট অক্ষরের মূল্যবান কাগজ ছিল।
"স্যাম, ফোন নম্বর দাও।"
"5555555555"
"ওহ না, আমি কাগজের বাইরে আছি। আমি যদি আগে জানতে পারতাম যে আমি কতটা ডেটা চেয়েছি আমি আরও ভাল প্রস্তুত করতে পারতাম!"
সুতরাং পরিবর্তে, বেশিরভাগ ভাষাগুলি আপনাকে কোনও প্রকারের ঘোষণা দেয়, সুতরাং এটি সময়ের আগেই জানতে এবং প্রস্তুত করবে:
"স্যাম, টেলিফোন নম্বর কত দিন?"
"দশটি অক্ষর।"
"ঠিক আছে, তারপরে আমাকে একটি বড় কাগজের টুকরো পেতে দিন। এখন আমাকে ফোন নম্বর দিন" "
"5555555555"
"বুঝেছি! ধন্যবাদ স্যাম!"
এটি ডেটা সংরক্ষণের প্রকৃত মৌলিক উপায়গুলির দিকে নজর দিলে এটি আরও চুলচেরা হয়। আপনি যদি আমার মতো হন তবে আপনার কাছে বিবিধ নোট, একটি নম্বর কেবল লিখে দেওয়া হয়েছে, কোনও প্রসঙ্গ বা কোনও কিছুর জন্য লেবেলিং নেই এবং তিন দিন পরে এর কোনওটির অর্থ কী তা আপনার কোনও ধারণা নেই। এটি অনেক সময় কম্পিউটারের জন্যও সমস্যা। প্রচুর ভাষার "ইনট" প্রকার (ইনট, লম্বা, সংক্ষিপ্ত, বাইট) এবং "ফ্লোট" (ফ্লোট, ডাবল) প্রকার রয়েছে। কেন এটি প্রয়োজনীয়?
ভাল প্রথমে দেখা যাক যে কোনও পূর্ণসংখ্যা কীভাবে সংরক্ষণ করা হয় এবং কম্পিউটারের মধ্যে সাধারণত প্রতিনিধিত্ব করা হয়। আপনি সম্ভবত অবগত আছেন যে প্রাথমিক স্তরে এটি সমস্ত বাইনারি (1 এবং 0 এর)। বাইনারি আসলে একটি সংখ্যা সিস্টেম যা ঠিক আমাদের দশমিক সংখ্যা সিস্টেমের মতো কাজ করে। দশমিক, আপনি 0 থেকে 9 গণনা করুন (আপনি লিখেছেন না এমন অসীম সূচিত নেতৃস্থানীয় জিরো দিয়ে), তারপরে আপনি 0 এ ফিরে যান এবং পরবর্তী অঙ্কটি বৃদ্ধি করেন যাতে আপনার 10 থাকে You আপনি 19 থেকে 20 পর্যন্ত গড়িয়ে না যাওয়া পর্যন্ত পুনরাবৃত্তি করবেন, আপনি 99 থেকে 100 পর্যন্ত গড়িয়ে পড়া না হওয়া পর্যন্ত পুনরাবৃত্তি করুন এবং আরও অনেক কিছু।
বাইনারি 0 থেকে 9 এর পরিবর্তে 0 থেকে 1 এর পরিবর্তে আলাদা হয় না, 0, 1, 10, 11, 100, 101, 110, 111, 1000 গণনা করুন। সুতরাং আপনি যখন 9-এ টাইপ করেন তখন মেমরিতে বাইনারি রেকর্ড করা হয় 1001 হিসাবে। এটি একটি আসল সংখ্যা। এটি হ'ল ফর্মটিতে যোগ, বিয়োগ, গুণক ইত্যাদি করা যেতে পারে। 10 + 1 = 11. 10 + 10 = 100 (1 থেকে 0 এর উপরে রোল করুন এবং 1 বহন করুন)। 11 x 10 = 110 (এবং সমতুল্য, 11 + 11 = 110)।
এখন প্রকৃত মেমোরিতে (নিবন্ধভুক্তদের অন্তর্ভুক্ত), একে অপরের ঠিক পাশের বিটগুলির (সম্ভাব্য 1 বা 0 ') বিস্তৃতগুলির একটি তালিকা আছে, অ্যারে রয়েছে, যা এই বিটগুলিকে যুক্তিযুক্তভাবে তৈরি করার জন্য সংগঠিত করে সংখ্যাটি ১ এর বেশি? সমস্যাটি হ'ল, দশমিকের সাথে আপনি কী করবেন? আপনি রেজিস্টারে দুটি বিটের মধ্যে কেবল হার্ডওয়্যার একটি টুকরো সন্নিবেশ করতে পারবেন না এবং প্রতিটি জোড়া বিটের মধ্যে "দশমিক বিট" যুক্ত করতে অনেক বেশি ব্যয় হবে। তো এখন কি করা?
আপনি এটি এনকোড। সাধারণত, সিপিইউ বা সফ্টওয়্যারটির আর্কিটেকচার এটি নির্ধারণ করে যে এটি কীভাবে হয় তবে একটি সাধারণ উপায় হ'ল একটি চিহ্ন (+ বা - সাধারণত 1 নেতিবাচক হয়) নিবন্ধের প্রথম বিটে একটি ম্যান্টিসা (আপনার নম্বর স্থানান্তরিত) তবে নীচের এক্স সংখ্যক বিটগুলির জন্য দশমিক ছাড়িয়ে যাওয়ার অনেক বার প্রয়োজন হয়, এবং বাকী অংশের জন্য একটি এক্সপোনেন্ট (আপনাকে এটি শিফট করতে হয়েছিল এমন সংখ্যা)। এটি বৈজ্ঞানিক স্বরলিপি অনুরূপ।
টাইপিং সংকলকটি এটি কী দেখছে তা জানতে অনুমতি দেয়। কল্পনা করুন যে আপনি রেজিস্টারে 1.3 মানটি সংরক্ষণ করেছেন। আমরা এখানে আমাদের নিজস্ব অভিনব এনকোডিং স্কিমটি নিয়ে আসছি, সাইন এর জন্য 1 বিট, ম্যান্টিসার জন্য 4, এক্সপেন্ডেন্টের জন্য 3 (স্বাক্ষরের জন্য 1 বিট, প্রস্থের জন্য 2)। এটি একটি ধনাত্মক সংখ্যা, সুতরাং সাইনটি ধনাত্মক (0)। আমাদের ম্যান্টিসাটি 13 (1101) হবে এবং আমাদের প্রকাশকটি -1 (101 (নেতিবাচক, 1 = 1)) হবে। সুতরাং আমরা 01101101 টি রেজিস্টারে সংরক্ষণ করি। এখন আমরা এই ভেরিয়েবলটি টাইপ করি নি, তাই রানটাইম এটি ব্যবহার করতে গেলে এটি বলে "অবশ্যই, এটি একটি পূর্ণসংখ্যা কেন নয়" তাই যখন এটি 109 (+৪ + 32 + 8 + 4 + 1), যা স্পষ্টতই সঠিক নয়।
যদিও প্রতিটি ভাষায় আপনাকে স্পষ্টভাবে টাইপ করা প্রয়োজন হয় না। সি # এর একটি কীওয়ার্ড রয়েছে "ভার" যা সংকলনের সময় কোনও ভেরিয়েবলের ধরণের ব্যাখ্যা করতে পারে এবং জাভাস্ক্রিপ্টের মতো অন্যান্য ভাষা সম্পূর্ণ গতিময়ভাবে টাইপ করা হয়েছে যে আপনি কোনও ভেরিয়েবেলে একটি পূর্ণসংখ্যা সংরক্ষণ করতে পারেন, তারপরে এটি একটি বুলিয়ানকে অর্পণ করুন, তারপরে এটিকে আবার একটি স্ট্রিংতে নির্ধারণ করুন এবং ভাষা এটির সমস্ত কিছুই ট্র্যাক করে।
তবে এটি সংকলক, দোভাষী বা রানটাইমের ক্ষেত্রে অনেক সহজ - এবং প্রায়শই একটি দ্রুত প্রোগ্রামের ফলস্বরূপ যেহেতু এটির সমস্ত টাইপিংয়ের মাধ্যমে বাছাইয়ের মূল্যবান সংস্থান ব্যয় করতে হয় না - আপনাকে জিজ্ঞাসা করতে, প্রোগ্রামারটি কী ধরণের আপনি এটি দিচ্ছেন