Gitt et binært tall som en streng, skriv ut 1- og 2-komplementene.
1s komplement av et binært tall er et annet binært tall oppnådd ved å veksle mellom alle bitene i det, dvs. transformere 0-biten til 1 og 1-biten til 0. I 1-komplementformatet forblir de positive tallene uendret . De negative tallene oppnås ved å ta 1-komplementet av positive motparter.
for eksempel vil +9 bli representert som 00001001 i åtte-bits notasjon og -9 vil bli representert som 11110110, som er 1-komplementet til 00001001.
Eksempler:
1's complement of '0111' is '1000' 1's complement of '1100' is '0011'>
2s komplement av et binært tall er 1, lagt til 1-komplementet til det binære tallet. I 2-ens komplementrepresentasjon av binære tall, representerer MSB tegnet med en '0' brukt for plusstegn og en '1' brukt for et minustegn. de resterende bitene brukes til å representere størrelsen. positive størrelser er representert på samme måte som i tilfellet med tegnbit eller 1s komplementrepresentasjon. Negative størrelser er representert ved 2s komplement av deres positive motparter.
Eksempler:
singleton design mønster java
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'>
Et annet triks for å finne tos komplement:
Trinn 1: Start fra den minst signifikante biten og gå til venstre til du finner en 1. Inntil du finner 1, forblir bitene de samme
Steg 2: Når du har funnet 1, la 1-en være som den er, og nå
Trinn 3: Vend alle bitene som er igjen i 1.
Illustrasjon
Anta at vi må finne 2s-komplement av 100100
Trinn 1: Traverser og la biten forbli den samme til du finner 1. Her er x ikke kjent ennå. Svar = xxxx00 –
Steg 2 : Du fant 1. La det forbli det samme. Svar = xxx100
Trinn 3: Vend alle bitene til venstre inn i 1. Svar = 011100.
Derfor er 2s-komplementet til 100100 011100.
Anbefalt praksis 1s komplement Prøv det!For ens komplement trenger vi ganske enkelt å snu alle biter.
For 2s komplement finner vi først ens komplement. Vi krysser ens komplement med start fra LSB (minst signifikant bit), og ser etter 0. Vi snur alle 1-er (endre til 0) til vi finner en 0. Til slutt snur vi funnet 0. For eksempel er 2-komplement av 01000 11000 (Merk at vi først finner ens komplement på 01000 som 10111). Hvis det er alle 1-er (i ens komplement), legger vi til en ekstra 1-er i strengen. For eksempel er 2s komplement av 000 1000 (1s komplement av 000 er 111).
Nedenfor er gjennomføringen.
C++
react js-opplæringen
// C++ program to print 1's and 2's complement of> // a binary number> #include> using> namespace> std;> > // Returns '0' for '1' and '1' for '0'> char> flip(>char> c) {>return> (c ==>'0'>)?>'1'>:>'0'>;}> > // Print 1's and 2's complement of binary number> // represented by 'bin'> void> printOneAndTwosComplement(string bin)> {> >int> n = bin.length();> >int> i;> > >string ones, twos;> >ones = twos =>''>;> > >// for ones complement flip every bit> >for> (i = 0; i ones += flip(bin[i]); // for two's complement go from right to left in // ones complement and if we get 1 make, we make // them 0 and keep going left when we get first // 0, make that 1 and go out of loop twos = ones; for (i = n - 1; i>= 0; i--) { if (enere[i] == '1') toere[i] = '0'; else { twos[i] = '1'; gå i stykker; } } // Hvis ingen pause: alle er 1 som i 111 eller 11111; // i slike tilfeller, legg til ekstra 1 i begynnelsen hvis (i == -1) twos = '1' + twos; cout<< '1's complement: ' << ones << endl; cout << '2's complement: ' << twos << endl; } // Driver program int main() { string bin = '1100'; printOneAndTwosComplement(bin); return 0; }> |
>
>
Java
// Java program to print 1's and 2's complement of> // a binary number> > class> GFG> {> > >// Returns '0' for '1' and '1' for '0'> >static> char> flip(>char> c)> >{> >return> (c ==>'0'>) ?>'1'> :>'0'>;> >}> > >// Print 1's and 2's complement of binary number> >// represented by 'bin'> >static> void> printOneAndTwosComplement(String bin)> >{> >int> n = bin.length();> >int> i;> > >String ones =>''>, twos =>''>;> >ones = twos =>''>;> > >// for ones complement flip every bit> >for> (i =>0>; i { ones += flip(bin.charAt(i)); } // for two's complement go from right to left in // ones complement and if we get 1 make, we make // them 0 and keep going left when we get first // 0, make that 1 and go out of loop twos = ones; for (i = n - 1; i>= 0; i--) { if (ones.charAt(i) == '1') { twos = twos.substring(0, i) + '0' + twos.substring(i + 1); } else { twos = twos.substring(0, i) + '1' + twos.substring(i + 1); gå i stykker; } } // Hvis ingen pause: alle er 1 som i 111 eller 11111; // i slike tilfeller, legg til ekstra 1 i begynnelsen hvis (i == -1) { twos = '1' + twos; } System.out.println('1s komplement: ' + enere);; System.out.println('2's komplement: ' + toere); } // Driverkode offentlig statisk void main(String[] args) { String bin = '1100'; printOneAndTosComplement(bin); } } // Denne koden er bidratt av Rajput-Ji> |
>
Det er
>
Python3
# Python3 program to print 1's and 2's> # complement of a binary number> > # Returns '0' for '1' and '1' for '0'> def> flip(c):> >return> '1'> if> (c>=>=> '0'>)>else> '0'> > # Print 1's and 2's complement of> # binary number represented by 'bin'> def> printOneAndTwosComplement(>bin>):> > >n>=> len>(>bin>)> >ones>=> ''> >twos>=> ''> > ># for ones complement flip every bit> >for> i>in> range>(n):> >ones>+>=> flip(>bin>[i])> > ># for two's complement go from right> ># to left in ones complement and if> ># we get 1 make, we make them 0 and> ># keep going left when we get first> ># 0, make that 1 and go out of loop> >ones>=> list>(ones.strip(''))> >twos>=> list>(ones)> >for> i>in> range>(n>-> 1>,>->1>,>->1>):> > >if> (ones[i]>=>=> '1'>):> >twos[i]>=> '0'> >else>:> >twos[i]>=> '1'> >break> > >i>->=> 1> ># If No break : all are 1 as in 111 or 11111> ># in such case, add extra 1 at beginning> >if> (i>=>=> ->1>):> >twos.insert(>0>,>'1'>)> > >print>(>'1's complement: '>,>*>ones, sep>=> '')> >print>(>'2's complement: '>,>*>twos, sep>=> '')> > # Driver Code> if> __name__>=>=> '__main__'>:> >bin> => '1100'> >printOneAndTwosComplement(>bin>.strip(''))> > # This code is contributed> # by SHUBHAMSINGH10> |
>
>
C#
haug og haug sortering
// C# program to print 1's and 2's complement of> // a binary number> using> System;> > class> GFG> {> > >// Returns '0' for '1' and '1' for '0'> >static> char> flip(>char> c)> >{> >return> (c ==>'0'>) ?>'1'> :>'0'>;> >}> > >// Print 1's and 2's complement of binary number> >// represented by 'bin'> >static> void> printOneAndTwosComplement(String bin)> >{> >int> n = bin.Length;> >int> i;> > >String ones =>''>, twos =>''>;> >ones = twos =>''>;> > >// for ones complement flip every bit> >for> (i = 0; i { ones += flip(bin[i]); } // for two's complement go from right to left in // ones complement and if we get 1 make, we make // them 0 and keep going left when we get first // 0, make that 1 and go out of loop twos = ones; for (i = n - 1; i>= 0; i--) { if (ones[i] == '1') { twos = twos.Substring(0, i) + '0' + twos.Substring(i + 1,twos.Length-( i+1)); } else { twos = twos.Substring(0, i) + '1' + twos.Substring(i + 1,twos.Length-(i+1)); gå i stykker; } } // Hvis ingen pause: alle er 1 som i 111 eller 11111; // i slike tilfeller, legg til ekstra 1 i begynnelsen hvis (i == -1) { twos = '1' + twos; } Console.WriteLine('1s komplement: ' + enere);; Console.WriteLine('2s komplement: ' + toere); } // Driverkode offentlig statisk void Main(String[] args) { String bin = '1100'; printOneAndTosComplement(bin); } } // Denne koden er bidratt av 29AjayKumar> |
>
c++ streng splitt
>
Javascript
> > // Javascript program to print 1's and 2's complement of> // a binary number> > // Returns '0' for '1' and '1' for '0'> function> flip (c) {>return> (c ==>'0'>)?>'1'>:>'0'>;}> > // Print 1's and 2's complement of binary number> // represented by 'bin'> function> printOneAndTwosComplement(bin)> {> >var> n = bin.length;> >var> i;> > >var> ones, twos;> >ones = twos =>''>;> > >// for ones complement flip every bit> >for> (i = 0; i ones += flip(bin[i]); // for two's complement go from right to left in // ones complement and if we get 1 make, we make // them 0 and keep going left when we get first // 0, make that 1 and go out of loop twos = ones; twos = twos.split('') for (i = n - 1; i>= 0; i--) { if (enere[i] == '1') toere[i] = '0'; else { twos[i] = '1'; gå i stykker; } } twos = twos.join('') // If No break : alle er 1 som i 111 eller 11111; // i slike tilfeller, legg til ekstra 1 i begynnelsen hvis (i == -1) twos = '1' + twos; document.write( '1s komplement: ' + enere + ' '); document.write( '2s komplement: ' + toere + ' '); } // Driverprogram var bin = '1100'; printOneAndTosComplement(bin);> |
>
>
Produksjon:
1's complement: 0011 2's complement: 0100>
Tidskompleksitet: På)
Hjelpeplass: O(1)