Sunday, January 7, 2024

বাইনারি যোগ বিয়োগ Addition and Subtraction in Binary System

বাইনারি সংখ্যা আমাদের পরিচিত দশমিক সংখ্যার মতোই একটি সংখ্যা পদ্ধতি। পার্থক্যটুকু হচ্ছে যে দশমিক সংখ্যা পদ্ধতিতে ভিত্তি 10 এবং বাইনারিতে ভিত্তি 2।

কাজেই দশমিক সংখ্যা পদ্ধতিতে আমরা যেভাবে যোগ এবং বিয়োগ করতে পারি দশমিক পদ্ধতিতেও হুবহু সেভাবে যোগ এবং বিয়োগ করতে পারব।  যেমনঃ- 

তবে যেহেতু বাইনারি সংখ্যার সবচেয়ে বড় ব্যবহার ডিজিটাল ইলেকট্রনিক্সে তাই বাইনারি যোগ এবং বিয়োগের প্রয়োগের জন্য আলাদা কিছু পদ্ধতি ব্যবহার করা হয়। সাধারণ সংখ্যা যোগ-বিয়োগের বেলায় আমাদের কখনোই আমরা কত অঙ্কের সংখ্যা যোগ কিংবা বিয়োগ করছি সেটি আগে থেকে জানার প্রয়োজন হয় না কিন্তু ইলেকট্রনিক সার্কিট ব্যবহার করে বাইনারি যোগ-বিয়োগ করার সময় কত অঙ্কের সংখ্যা যোগ করছি আগে থেকে জানতে হয়। কারণ সার্কিটটি যতগুলো বিট ধারণ করতে পারবে সংখ্যাটিতে তার থেকে বেশি সংখ্যক অঙ্ক থাকলে সেটি ব্যবহার করা যায় না। শুধু তাই নয় যোগ করার পর বিটের নির্ধারিত সংখ্যা থেকে বিটের সংখ্যা বেড়ে গেলে সেটিও সঠিকভাবে ফলাফল দেবে না। ডিজিটাল ইলেকট্রনিক্সে যেহেতু দুটি ভিন্ন ভিন্ন ভোল্টেজ দিয়ে বাইনারি 0 এবং 1 অঙ্ক দুটি দিয়ে প্রকাশ করা হয় তাই যাবতীয় গাণিতিক অঙ্কও এই অঙ্ক দুটো দিয়েই প্রকাশ করতে হবে।

অনেকে মনে করতে পারে ডিজিটাল ইলেকট্রনিক্স করার জন্য বাইনারি সংখ্যা দিয়ে যোগ, বিয়োগ, গুণ এবং ভাগ এই প্রত্যেকটি প্রক্রিয়াই করার ব্যবস্থা থাকতে হয়। আসলে একটি সংখ্যাকে নেগেটিভ করা এবং যোগ করার সার্কিট থাকলেই অন্য সব গাণিতিক প্রক্রিয়া করা যায়। কোনো একটি সংখ্যা বিয়োগ করতে হলে সংখ্যাটিকে নিগেটিভ করে যোগ করতে হবে। সংখ্যা দিয়ে গুণ করার পরিবর্তে সেই নির্দিষ্ট সংখ্যক বার যোগ করলেই হয়। বার বার বিয়োগ করে ভাগের কাজ চালিয়ে নেয়া যায়। তাই আমরা দেখব একটি সংখ্যাকে নেগেটিভ করার একটি সুনির্দিষ্ট পদ্ধতি জানা থাকলে শুধু যোগ করার সার্কিট দিয়ে আমরা বিয়োগ, গুণ, এবং ভাগও করতে পারব।

চিহ্নযুক্ত সংখ্যা Signed Numbers

একটি বাইনারি সংখ্যাকে পজেটিভ বা নেগেটিভ হিসেবে দেখানোর একটি সহজ উপায় হচ্ছে MSB টিকে সাইনের জন্য নির্ধারিত করে রাখা। যদি সেটি ০ হয় তাহলে বুঝতে হবে সংখ্যাটি পজেটিভ আর যদি সেটি 1 হয় তাহলে বুঝতে হবে সংখ্যাটি নেগেটিভ। কাজেই ৪ (আট) বিটের একটি সংখ্যার জন্যে 7টি বিট দিয়ে সংখ্যার মান প্রকাশ করা হবে এবং অষ্টম বিটটি সংখ্যার সাইন প্রকাশ করার জন্য আলাদাভাবে সংরক্ষিত থাকবে। এভাবে সংখ্যা প্রকাশ করার সময় আরো একটি বিষয় সবসময় মেনে চলতে হয়। সংখ্যাগুলোর বিট সংখ্যা সবচেয়ে পরিপূর্ণ রাখতে হবে -এর মাঝে ফাঁকা অংশ থাকতে পারবে না। আট বিটের সংখ্যায় +1 লেখার সময় 01 লেখা যাবে না, 0000001 লিখতে হবে। প্রথম ০টি বোঝাচ্ছে সংখ্যাটি পজেটিভ, পরের সাত বিট দিয়ে 1 লেখা হয়েছে। একইভাবে 1 লিখতে হলে 11 লেখা যাবে না 10000001 লিখতে হবে। প্রথম 1টি বোঝাচ্ছে সংখ্যাটি নেগেটিভ পরের সাতটি বিট দিয়ে সংখ্যার মান (1) প্রকাশ করা হয়েছে। এই পদ্ধতিতে কিছু পজিটিভ এবং নিগেটিভ সংখ্যা লিখে দেখানো হলোঃ
এই পদ্ধতিতে সংখ্যাকে পজেটিভ এবং নেগেটিভ হিসেবে প্রকাশ করায় একটি গুরুতর সমস্যা আছে। সমস্যাটি বোঝার জন্য আমরা নিচে চার বিটের দুটি সংখ্যা লিখছি, এক বিট সাইনের জন্য, বাকি তিন বিট মূল সংখ্যাটির মান বোঝানোর জন্যঃ 0000 এবং 1000

বোঝাই যাচ্ছে প্রথম সংখ্যাটি +0 এবং দ্বিতীয়টি -0 কিন্তু আমরা সবাই জানি, শূন্য (0) সংখ্যাটির পজেটিভ এবং নেগেটিভ হয় না- কিন্তু এই পদ্ধতিতে +0 এবং -0 মেনে নেয়া ছাড়া কোনো উপায় নেই। +0 এবং -0 এর অস্তিত্বটি কম্পিউটারে জটিল হিসেবে অনেক বড় সমস্যার সৃষ্টি করতে পারে।


২-এর পরিপূরক 2's Complement

সাইন বিট দিয়ে সংখ্যার পজেটিভ এবং নেগেটিভ প্রকাশ করার জটিলতা থেকে রক্ষা পাওয়ার একটি চমৎকার পদ্ধতি রয়েছে। সেটি হচ্ছে 2 -এর পরিপূরক (2's complement) বিষয়টি বোঝার আগে আমরা নেগেটিভ সংখ্যা বলতে কী বোঝাই সেটি বুঝে নেই। একটি সংখ্যার সাথে যে সংখ্যাটি যোগ করলে যোগফল শূন্য হবে সেটিই হচ্ছে তার নেগেটিভ সংখ্যা। কাজেই আমাদেরকে কোনো একটি বাইনারি সংখ্যা দেওয়া হলে আমরা এমন আরেকটি বাইনারি সংখ্যা খুঁজে বের করব, যেটি যোগ করলে যোগফল হবে শূন্য।

আমরা আট বিটের একটি বাইনারি সংখ্যা দিয়ে শুরু করি। ধরা যাক সংখ্যাটি 10110011। এবারে আমরা সংখ্যাটির 1 -এর পরিপূরক (1's complement) নিই অর্থাৎ প্রত্যেকটি 1 কে 0 দিয়ে এবং ০ কে 1 দিয়ে পরিবর্তন করে নিইঃ

এই বাইনারি সংখ্যাটি হচ্ছে আট বিটের সর্বোচ্চ সংখ্যা। এর সাথে 1 যোগ করা হলে সংখ্যাটি আর আট বিটে সীমাবদ্ধ থাকবে না, এটি হবে ও বিটের একটি সংখ্যা।
আমরা যেহেতু ৪ (আট) বিটের সংখ্যার মাঝে সীমাবদ্ধ থাকতে চাই, তাই নবম বিটকে উপেক্ষা করে আমরা বলতে পারি সংখ্যাটি ০০০০০০০০ বা শূন্য। যেহেতু একটা সংখ্যার সাথে শুধু তার নেগেটিভ সংখ্যা যোগ করা হলেই যোগফল হিসেবে আমরা শূন্য পাই, তাই আমরা বলতে পারি যে কোনো বাইনারি সংখ্যার 1 কে ০ এবং ০ কে 1 দিয়ে পরিবর্তন করে (বা 1 এর পরিপূরক নিয়ে) যে সংখ্যা পাব তার সাথে 1 যোগ করে নেয়া হলে সেটি মূল বাইনারি সংখ্যার নেগেটিভ হিসেবে কাজ করবে। এই ধরণের সংখ্যাকে বলা হয় মূল সংখ্যাটির ২-এর পরিপূরক।

আমরা এখন 10110011 -এর নিগেটিভ অথবা 2 -এর পরিপূরক বের করতে পারিঃ
কাজেই আমরা বলতে পারি, আট বিটের একটি সংখ্যা হিসেবে 01001101 হচ্ছে 10110011 এর নেগেটিভ। একটি সংখ্যাকে একবার নেগেটিভ করে আবার সেটিকে নেগেটিভ করা হয় তাহলে আমরা আগের সংখ্যাটি ফিরে পাব। আমরা আমাদের এই উদাহরণটিতে সেটি পরীক্ষা করে দেখতে পারি। 01001101কে আবার 2- এর পরিপূরক করা হলে আমরা পাবঃ
আমরা সত্যি সত্যি মূল সংখ্যাটি ফিরে পেয়েছি, অর্থাৎ 01001101 এবং 10110011 হচ্ছে একটি আরেকটির নেগেটিভ।

এবারে একটা খুবই গুরুত্বপূর্ণ বিষয় আমাদের বিবেচনা করতে হবে। আমরা 2 -এর পরিপূরক বের করে যে কোনো বাইনারি সংখ্যাকে তার নেগেটিভ করতে পারব, কিন্তু মূল বাইনারি সংখ্যাটি শুরুতে কত ছিল সেটি কি আমরা জানি? যেমন ধরা যাক 1001 একটি চার বিটের বাইনারি সংখ্যা (যার দশমিক মান হচ্ছে 9), খুব সহজেই আমরা দেখাতে পারি 0111 হচ্ছে এর 2 -এর পরিপূরক (যার দশমিক মান হচ্ছে 7)। অর্থাৎ এই সংখ্যাদুটি একে অপরের 2 -এর পরিপূরকঃ

তাহলে আমরা প্রশ্ন করতে পারি, চার বিটের একটি সংখ্যা হিসেবে আমরা কি 1001 কে +9 ধরে নিয়ে এর 2 -এর পরিপূরক হিসেবে 0111কে -9 ধরে নেব? নাকি 0111কে +7 ধরে নিয়ে 2এর পরিপূরক হিসেবে 1001কে -7 ধরে নেব? এই বিভ্রান্তি থেকে মুক্তি পাবার জন্য একটি নিয়ম মেনে চলা হয়। নিয়মটি হচ্ছে MSB যদি 0 হয় শুধু তাহলেই সংখ্যাটি পজেটিভ হবে এবং বাইনারি সংখ্যাটি প্রকৃত মান দেখাবে। MSB যদি 1 হয় তাহলে সংখ্যাটি নেগেটিভ এবং শুধু ২-এর পরিপূরক নিয়ে তার প্রকৃত পজেটিভ মান বের করা যাবে।

এই পদ্ধতিতে কিছু সংখ্যার নেগেটিভ রূপ বের করে দেখানো হলোঃ



ধন্যবাদ আজকের আর্টিকেলটি পড়ার জন্য। 

আরো পড়ুন

শেয়ার করুন