এই সেকশনে, আমরা দেখব কীভাবে একটি ইন্টিজারর ১'র কমপ্লিমেন্ট (One's Complement) বের করা যায়। আমরা কমপ্লিমেন্ট অপারেটর ব্যবহার করে এটি খুব দ্রুত করতে পারি, কিন্তু এটি ৩২-বিট কমপ্লিমেন্টেড মান তৈরি করবে (৪-বাইট ইন্টিজার)। এখানে আমরা n-বিট সংখ্যার কমপ্লিমেন্ট চাই।
মনে করুন у нас একটি সংখ্যা আছে, মনে করুন ২২। এর বাইনারি সমতুল্য ১০১১০। কমপ্লিমেন্টেড মান হল ০১০০১ যা ৯ এর সমান। এখন প্রশ্ন আসে, এই মানটি কীভাবে বের করব? প্রথমে দিয়ে गये সংখ্যার বিট সংখ্যা বের করতে হবে। মনে করুন কাউন্ট হল c (এখানে ২২-এর জন্য c = ৫)। আমাদের c সংখ্যক ১ তৈরি করতে হবে। তাই এটি হবে ১১১১১। এটি बनाने জন্য, আমরা ১ কে বামে c বার শিফ্ট করব, তারপর ১ বিয়োগ করব। ১ কে ৫ বার বামে শিফ্ট করলে হবে ১০০০০০, তারপর ১ বিয়োগ করলে হবে ১১১১১। এরপর ১১১১১ এবং ১০১১০ এর সাথে XOR অপারেশন করলে কমপ্লিমেন্ট পাওয়া যাবে।
উদাহরণ (C++ কোড)
#include <iostream>
#include <cmath>
using namespace std;
int findComplement(int n) {
int bit_count = floor(log2(n)) + 1;
int ones = ((1 << bit_count) - 1);
return ones ^ n;
}
int main() {
int number = 22;
cout << "One's Complement of " << number << " is: " << findComplement(number);
}
আউটপুট
One's Complement of 22 is: 9