কম্পিউটার টিউটোরিয়াল

C++-এ একটি ইন্টিজারর ওন'স কমপ্লিমেন্ট খুঁজে বের করা

এই সেকশনে, আমরা দেখব কীভাবে একটি ইন্টিজারর ১'র কমপ্লিমেন্ট (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
  1. C++-এ ১ থেকে n পর্যন্ত ডিজিট ১-এর সংখ্যা গণনা (Number of Digit One)

  2. C++-এ চেসবোর্ডে (Chessboard) মোট কতগুলো বর্গ (Square) আছে তা বের করার প্রোগ্রাম

  3. C++-এ পূর্ববর্তী সংখ্যা ১'র কমপ্লিমেন্ট কিনা (Previous Number Same as 1's Complement)

  4. C++-এ একটি সেট বিট ফ্লিপ করে ছোট সংখ্যা (Previous Smaller Integer with One Less Set Bit)