টু'স কমপ্লিমেন্ট (Two's Complement) কী?
বাইনারি সংখ্যার টু'স কমপ্লিমেন্ট বের করার দুটি পদ্ধতি:
- পদ্ধতি ১: ওন্স কমপ্লিমেন্ট (বিট ফ্লিপ) করে তারপর ১ যোগ করুন।
- পদ্ধতি ২: LSB (লೀست সিগনিফিক্যান্ট বিট) থেকে প্রথম '১' পর্যন্ত সব বিট অপরিবর্তিত রাখুন, বাকিগুলো ফ্লিপ করুন।
লজিক (পদ্ধতি ১: ওন্স কমপ্লিমেন্ট + ১)
// Ones complement
for (i = 0; i < SIZE; i++) {
if (num[i] == '0') one[i] = '1';
else one[i] = '0';
}
// Twos complement: one[] + 1
carry = 1;
for (i = SIZE-1; i >= 0; i--) {
if (one[i] == '1' && carry == 1) two[i] = '0';
else if (one[i] == '0' && carry == 1) { two[i] = '1'; carry = 0; }
else two[i] = one[i];
}
সি প্রোগ্রাম (৮-বিট বাইনারি ইনপুট)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 8
int main() {
char num[SIZE+1], one[SIZE+1], two[SIZE+1];
int i, carry = 1;
printf("Enter %d-bit binary number: ", SIZE);
scanf("%s", num);
// Validate input length
if (strlen(num) != SIZE) {
printf("Error: Enter exactly %d bits\n", SIZE);
return 1;
}
// Ones complement
for (i = 0; i < SIZE; i++) {
if (num[i] == '0') one[i] = '1';
else if (num[i] == '1') one[i] = '0';
else { printf("Invalid binary digit\n"); return 1; }
}
one[SIZE] = '\0';
printf("One's complement: %s\n", one);
// Two's complement
for (i = SIZE-1; i >= 0; i--) {
if (one[i] == '1' && carry == 1) two[i] = '0';
else if (one[i] == '0' && carry == 1) { two[i] = '1'; carry = 0; }
else two[i] = one[i];
}
two[SIZE] = '\0';
printf("Two's complement: %s\n", two);
return 0;
}
আউটপুট
Enter 8-bit binary number: 1000010 One's complement: 0111101 Two's complement: 0111110
নোট
- ইনপুট অবশ্যই বাইনারি স্ট্রিং (শুধু ০ এবং ১) হতে হবে।
- সাইনড ইন্টিজার রিপ্রেজেন্টেশনে টু'স কমপ্লিমেন্ট স্ট্যান্ডার্ড।
- নেগেটিভ নম্বর রিপ্রেজেন্ট করতে টু'স কমপ্লিমেন্ট ব্যবহার করা হয়।