Vzhľadom na binárne číslo ako reťazec vytlačte jeho doplnky 1 a 2.
doplnok 1 binárneho čísla je ďalšie binárne číslo získané prepnutím všetkých bitov v ňom, t. j. transformáciou bitu 0 na 1 a bitu 1 na 0. Vo formáte doplnku 1 zostávajú kladné čísla nezmenené. Záporné čísla sa získajú zobratím doplnku 1 kladných protipólov.
napríklad +9 bude reprezentované ako 00001001 v osembitovej notácii a -9 bude reprezentované ako 11110110, čo je doplnok 1 k 00001001.
Príklady:
1's complement of '0111' is '1000' 1's complement of '1100' is '0011'>
doplnok 2 binárneho čísla je 1, pripočítaná k doplnku 1 binárneho čísla. V dvojkovej reprezentácii binárnych čísel predstavuje MSB znamienko s „0“ používaným pre znamienko plus a „1“ používaným pre znamienko mínus. zostávajúce bity sa používajú na reprezentáciu veľkosti. kladné veličiny sú reprezentované rovnakým spôsobom ako v prípade reprezentácie znamienkového bitu alebo 1. Záporné veličiny sú reprezentované doplnkom 2 ich kladných náprotivkov.
Príklady:
bfs a dfs
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'>
Ďalší trik na nájdenie dvoch doplnkov:
Krok 1: Začnite od najmenej významného bitu a prejdite doľava, kým nenájdete 1. Kým nenájdete 1, bity zostanú rovnaké
Krok 2: Keď nájdete 1, nechajte 1 tak, ako je, a teraz
Krok 3: Otočte všetky zostávajúce bity do 1.
Ilustračné
Predpokladajme, že potrebujeme nájsť 2s doplnok z 100100
Krok 1: Prejdite a nechajte bit rovnaký, kým nenájdete 1. Tu x ešte nie je známe. Odpoveď = xxxx00 –
Krok 2 : Našli ste 1. Nech to zostane rovnaké. Odpoveď = xxx100
Krok 3: Otočte všetky zostávajúce bity do 1. Odpoveď = 011100.
Preto 2s doplnok 100100 je 011100.
Doplnok odporúčaného postupu 1 Vyskúšajte to!Na doplnenie musíme jednoducho prehodiť všetky bity.
V prípade doplnku 2 najprv nájdeme doplnok jednotky. Prechádzame jedným doplnkom od LSB (najmenej významný bit) a hľadáme 0. Prevraciame všetky 1 (zmeníme na 0), kým nenájdeme 0. Nakoniec preklopíme nájdenú 0. Napríklad dvojkový doplnok 01000 je 11000 (Všimnite si, že prvý doplnok 01000 nájdeme ako 10111). Ak sú všetky 1 (v jednom doplnku), pridáme do reťazca 1 navyše. Napríklad doplnok 2 000 je 1 000 (doplnok 1 000 je 111).
Nižšie je uvedená implementácia.
C++
// 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 (jednotky[i] == '1') dvojky[i] = '0'; else { twos[i] = '1'; prestávka; } } // Ak Bez prerušenia : všetky sú 1 ako v 111 alebo 11111; // v takom prípade pridajte na začiatok 1 navyše, ak (i == -1) dvojky = '1' + dvojky; cout<< '1's complement: ' << ones << endl; cout << '2's complement: ' << twos << endl; } // Driver program int main() { string bin = '1100'; printOneAndTwosComplement(bin); return 0; }> |
mylivericket
>
>
Java
java elseif
// 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); prestávka; } } // Ak Bez prerušenia : všetky sú 1 ako v 111 alebo 11111; // v takom prípade pridajte na začiatok 1 navyše if (i == -1) { twos = '1' + twos; } System.out.println('1's doplnok: ' + jedničky);; System.out.println('2's doplnok: ' + dvojky); } // Kód ovládača public static void main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Tento kód prispel Rajput-Ji> |
>
>
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#
json v príklade json
// 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 (jednotky[i] == '1') { dvojky = dvojky.Podreťazec(0, i) + '0' + dvojky.Podreťazec(i + 1,dvojky.Dĺžka-( i+1)); } else { twos = twos.Substring(0, i) + '1' + twos.Substring(i + 1,dva.Dlzka-(i+1)); prestávka; } } // Ak No break : všetky sú 1 ako v 111 alebo 11111; // v takom prípade pridajte na začiatok 1 navyše if (i == -1) { twos = '1' + twos; } Console.WriteLine('1's doplnok: ' + jedničky);; Console.WriteLine('2's doplnok: ' + dvojky); } // Kód ovládača public static void Main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Tento kód pridal 29AjayKumar> |
>
java tutoriál pre začiatočníkov
>
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 (jednotky[i] == '1') dvojky[i] = '0'; else { twos[i] = '1'; prestávka; } } twos = twos.join('') // If No break : všetky sú 1 ako v 111 alebo 11111; // v takom prípade pridajte na začiatok 1 navyše, ak (i == -1) dvojky = '1' + dvojky; document.write( '1's doplnok: ' + jedničky + ' '); document.write( doplnok '2: ' + dvojky + ' '); } // Program ovládača var bin = '1100'; printOneAndTwosComplement(bin);> |
>
>
Výkon:
1's complement: 0011 2's complement: 0100>
Časová zložitosť: O(n)
Pomocný priestor: O(1)