3.5 ২-এর পরিপূরক (2’s Complement)

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

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

মূল সংখ্যা10110011
1-এর পরিপূরক01001100
সংখ্যা দুটির যোগফল11111111

এই বাইনারি সংখ্যাটি হচ্ছে আট বিটের সর্বোচ্চ সংখ্যা। এর সাথে 1 যোগ করা হলে সংখ্যাটি আর আট বিটে সীমাবদ্ধ থাকবে না, এটি হবে 9 বিটের একটি সংখ্যা।

11111111
1
1 00000000

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

আমরা এখন 10110011-এর নেগেটিভ অথবা 2-এর পরিপূরক বের করতে পারি :

মূল সংখ্যা10110011
1-এর পরিপূরক01001100
1 যোগ1
2-এর পরিপূরক01001101

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

মূল সংখ্যা01001101
1-এর পরিপূরক10110010
1 যোগ1
2-এর পরিপূরক10110011

আমরা সত্যি সত্যি মূল সংখ্যাটি ফিরে পেয়েছি, অর্থাৎ 01001101 এবং 10110011 হচ্ছে একটি আরেকটির নেগেটিভ।

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

মূল সংখ্যা10011-এর পরিপূরক01101 যোগ12-এর পরিপূরক0111মূল সংখ্যা01111-এর পরিপূরক10001 যোগ12-এর পরিপূরক1001

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

চার বিটের উদাহরণ:

চার বিটের উদাহরণ:
+610 =01101-এর পরিপূরক10011 যোগ12-এর পরিপূরক -61010102
আট বিটের উদাহরণ:
+8310010100111-এর পরিপূরক101011001 যোগ12-এর পরিপূরক -831010101101

উদাহরণ: 5010 থেকে 2510 সংখ্যাটি 2-এর পরিপূরক পদ্ধতি ব্যবহার করে বিয়োগ দাও।
উত্তর:

+2510=000110012
1 এর পরিপূরক11100110
1 যোগ1
২ এর পরিপূরক -251011100111
+5010=001100102
-2510=111001112
যোগফল1000110012

যোগফলে নবম বিটে 1 অঙ্কটি ওভারফ্লো হিসেবে চলে এসেছে, সেটিকে বিবেচনা করার প্রয়োজন নেই। বাকি আট বিটের সংখ্যার MSB এর মান 0, যার অর্থ সংখ্যাটি পজেটিভ এবং আমরা জানি: 000110012 = +2510 কাজেই উত্তরটি সঠিক।

উদাহরণ: 2510 থেকে 5010 সংখ্যাটি 2-এর পরিপূরক পদ্ধতি ব্যবহার করে বিয়োগ দাও।
উত্তর:

+5010=001100102
1 এর পরিপূরক11001101
1 যোগ1
২ এর পরিপূরক -251011001110
+2510=000110012
5010=110011102
যোগফল111001112

যোগফলে আট বিটের সংখ্যার MSB এর মান 1, যার অর্থ সংখ্যাটি নেগেটিভ। কাজেই 2-এর পরিপূরক পদ্ধতি ব্যবহার করে সংখ্যাটিকে আবার নেগেটিভ করে তার পজেটিভ মান বের করতে হবে।

যোগফল11100111
1-এর পরিপূরক00011000
1 যোগ1
2-এর পরিপূরক0001001

আমরা জানি 000110012 = 2510 কাজেই প্রকৃত যোগফল -2510, অর্থাৎ উত্তরটি সঠিক।