সাইন বিট দিয়ে সংখ্যার পজেটিভ এবং নেগেটিভ প্রকাশ করার জটিলতা থেকে রক্ষা পাওয়ার একটি চমৎকার পদ্ধতি রয়েছে। সেটি হচ্ছে 2 -এর পরিপূরক (2's complement) বিষয়টি বোঝার আগে আমরা নেগেটিভ সংখ্যা বলতে কী বোঝাই সেটি বুঝে নেই। একটি সংখ্যার সাথে যে সংখ্যাটি যোগ করলে যোগফল শূন্য হবে সেটিই হচ্ছে তার নেগেটিভ সংখ্যা। কাজেই আমাদেরকে কোনো একটি বাইনারি সংখ্যা দেওয়া হলে আমরা এমন আরেকটি বাইনারি সংখ্যা খুঁজে বের করব, যেটি যোগ করলে যোগফল হবে শূন্য।
আমরা আট বিটের একটি বাইনারি সংখ্যা দিয়ে শুরু করি। ধরা যাক সংখ্যাটি : 10110011। এবারে আমরা সংখ্যাটির 1 -এর পরিপূরক (1's complement) নিই অর্থাৎ প্রত্যেকটি 1 কে 0 দিয়ে এবং 0 কে 1 দিয়ে পরিবর্তন করে নিই :
মূল সংখ্যা
10110011
1 -এর পরিপূরক
সংখ্যা দুটির যোগফল
01001100
11111111
এই বাইনারি সংখ্যাটি হচ্ছে আট বিটের সর্বোচ্চ সংখ্যা। এর সাথে 1 যোগ করা হলে সংখ্যাটি আর আট বিটে
সীমাবদ্ধ থাকবে না, এটি হবে 9 বিটের একটি সংখ্যা।
11111111
1
আমরা যেহেতু ৪ (আট) বিটের সংখ্যার মাঝে সীমাবদ্ধ থাকতে চাই, তাই নবম বিটকে উপেক্ষা করে আমরা বলতে পারি সংখ্যাটি ০০০০০০০০ বা শূন্য। যেহেতু একটা সংখ্যার সাথে শুধু তার নেগেটিভ সংখ্যা যোগ করা হলেই যোগফল হিসেবে আমরা শূন্য পাই, তাই আমরা বলতে পারি যে কোনো বাইনারি সংখ্যার 1 কে ০ এবং 0 কে 1 দিয়ে পরিবর্তন করে (বা 1 এর পরিপূরক নিয়ে) যে সংখ্যা পাব তার সাথে 1 যোগ করে নেয়া হলে সেটি মূল বাইনারি সংখ্যার নেগেটিভ হিসেবে কাজ করবে। এই ধরণের সংখ্যাকে বলা হয় মূল সংখ্যাটির 2 -এর পরিপূরক।
আমরা এখন 10110011 -এর নিগেটিভ অথবা 2 -এর পরিপূরক বের করতে পারি :
মূল সংখ্যা
10110011
1 -এর পরিপূরক 1 যোগ
01001100
2 -এর পরিপূরক
1
01001101
কাজেই আমরা বলতে পারি, আট বিটের একটি সংখ্যা হিসেবে 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 হয় তাহলে সংখ্যাটি নেগেটিভ এবং শুধু 2 -এর পরিপূরক নিয়ে তার প্রকৃত পজেটিভ মান বের করা যাবে।
এই পদ্ধতিতে কিছু সংখ্যার নেগেটিভ রূপ বের করে দেখানো হলো :
উদাহরণ : 5010 থেকে 2510 সংখ্যাটি 2 -এর পরিপুরক পদ্ধতি ব্যবহার করে বিয়োগ দাও।
উত্তর :
যোগফলে নবম বিটে 1 অঙ্কটি ওভারফ্লো হিসেবে চলে এসেছে, সেটিকে বিবেচনা করার প্রয়োজন নেই।
বাকি আট বিটের সংখ্যার MSB এর মান ০, যার অর্থ সংখ্যাটি পজেটিভ এবং আমরা জানি :
000110012 = +2510 কাজেই উত্তরটি সঠিক।
উদাহরণ : 2510 থেকে 5010 সংখ্যাটি 2 -এর পরিপূরক পদ্ধতি ব্যবহার করে বিয়োগ দাও।
উত্তর :
0011 00102
1
+5010 =
1 -এর পরিপূরক
1 যোগ
2 -এর পরিপূরক – 50 10
+2510=
0001 10012
-5010 = 1100 11102
যোগফল
1110 01112
যোগফলে আট বিটের সংখ্যার MSB এর মান 1, যার অর্থ সংখ্যাটি নেগেটিভ। কাজেই 2 -এর পরিপূরক
পদ্ধতি ব্যবহার করে সংখ্যাটিকে আবার নেগেটিভ করে তার পজেটিভ মান বের করতে হবে।
যোগফল
1 -এর পরিপূরক
1 যোগ
2 -এর পরিপুরক
আমরা জানি 000110012 = 2510 কাজেই প্রকৃত যোগফল – 2510, অর্থাৎ উত্তরটি সঠিক।
আরও দেখুন...