टूज कॉम्प्लीमेंट के दो तरीके
- विधि 1: बाइनरी को वन्स कॉम्प्लीमेंट में बदलें, फिर 1 जोड़ें।
- विधि 2: LSB से पहला सेट बिट तक के ट्रेलिंग जीरोज़ और वह बिट अपरिवर्तित रहें, शेष सभी कॉम्प्लीमेंट करें।
लॉजिक: वन्स कॉम्प्लीमेंट
for(i = 0; i < SIZE; i++) {
if(num[i] == '0') one[i] = '1';
else if(num[i] == '1') one[i] = '0';
}
one[SIZE] = '\0';
लॉजिक: टूज कॉम्प्लीमेंट (वन्स कॉम्प्लीमेंट में 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];
}
two[SIZE] = '\0';
पूर्ण C प्रोग्राम
#include <stdio.h>
#include <stdlib.h>
#define SIZE 8
int main() {
int i, carry = 1;
char num[SIZE + 1], one[SIZE + 1], two[SIZE + 1];
printf("Enter binary number (8 bits): ");
gets(num);
// Ones complement
for(i = 0; i < SIZE; i++) {
if(num[i] == '0') one[i] = '1';
else if(num[i] == '1') one[i] = '0';
}
one[SIZE] = '\0';
printf("Ones complement: %s\n", one);
// Twos 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("Twos complement: %s\n", two);
return 0;
}
आउटपुट
Enter binary number: 1000010 Ones complement: 0111101 Twos complement: 0111110
साइन्ड इंटीजर्स में टूज कॉम्प्लीमेंट
कंप्यूटर्स साइन्ड इंटीजर्स स्टोर करने के लिए टूज कॉम्प्लीमेंट उपयोग करते हैं।
- पॉजिटिव नंबर: सामान्य बाइनरी
- नेगेटिव नंबर: पॉजिटिव का टूज कॉम्प्लीमेंट
- उदाहरण: -5 (8-बिट) = 00000101 → 11111010 + 1 = 11111011
महत्व
- एडिशन/सबट्रैक्शन के लिए एक ही हार्डवेयर उपयोग होता है।
- शून्य का केवल एक प्रतिनिधित्व (+0 और -0 नहीं)।
- रेंज: -128 से +127 (8-बिट के लिए)।