Pokud je binární číslo jako řetězec, vytiskněte jeho doplňky 1 a 2.
doplněk 1 binárního čísla je další binární číslo získané přepnutím všech bitů v něm, tj. transformací bitu 0 na 1 a bitu 1 na 0. Ve formátu doplňku 1 zůstávají kladná čísla nezměněna. Záporná čísla se získají tak, že se vezme jeden doplněk kladných protějšků.
například +9 bude reprezentováno jako 00001001 v osmibitové notaci a -9 bude reprezentováno jako 11110110, což je doplněk 1 k 00001001.
Příklady:
1's complement of '0111' is '1000' 1's complement of '1100' is '0011'>
doplněk 2 binárního čísla je 1, přičtená k doplňku 1 binárního čísla. V dvojkové reprezentaci binárních čísel představuje MSB znaménko s „0“ použitým pro znaménko plus a „1“ používaným pro znaménko mínus. zbývající bity jsou použity pro reprezentaci velikosti. kladné veličiny jsou reprezentovány stejným způsobem jako v případě reprezentace znaménkového bitu nebo doplňku 1. Záporné veličiny jsou reprezentovány doplňkem 2 jejich kladných protějšků.
Příklady:
java bubble sort
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'>
Další trik k nalezení doplňku dvou:
Krok 1: Začněte od nejméně významného bitu a přejděte doleva, dokud nenajdete 1. Dokud nenajdete 1, bity zůstanou stejné
Krok 2: Jakmile najdete 1, nechte 1 tak, jak je, a teď
Krok 3: Přehoďte všechny zbývající bity do 1.
Ilustrace
Předpokládejme, že potřebujeme najít 2s doplněk 100100
Krok 1: Přejeďte a nechte bit zůstat stejný, dokud nenajdete 1. Zde x ještě není známo. Odpověď = xxxx00 –
Krok 2 : Našli jste 1. Ať to zůstane stejné. Odpověď = xxx100
Krok 3: Přehoďte všechny zbývající bity do 1. Odpověď = 011100.
Doplněk 2s 100100 je tedy 011100.
Doplněk doporučené praxe 1 Zkuste to!Pro doplnění musíme jednoduše přehodit všechny bity.
U doplňku 2 nejprve najdeme doplněk jedničky. Procházíme doplněk jedničky počínaje LSB (nejméně významný bit) a hledáme 0. Převracíme všechny jedničky (změna na 0), dokud nenajdeme 0. Nakonec otočíme nalezenou 0. Například dvojkový doplněk 01000 je 11000 (Všimněte si, že nejprve najdeme něčí doplněk 01000 jako 10111). Pokud jsou všechny jedničky (v jednom doplňku), přidáme do řetězce jednu navíc. Například doplněk 2 000 je 1 000 (doplněk 1 000 je 111).
Níže je implementace.
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 (jedničky[i] == '1') dvojky[i] = '0'; else { twos[i] = '1'; přestávka; } } // If No break : všechny jsou 1 jako v 111 nebo 11111; // v takovém případě přidejte na začátek 1 navíc if (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; }> |
podřetězec v jazyce Java
>
>
Jáva
// 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); přestávka; } } // If No break : všechny jsou 1 jako v 111 nebo 11111; // v takovém případě přidejte na začátek 1 navíc if (i == -1) { twos = '1' + twos; } System.out.println('1's doplněk: ' + jedničky);; System.out.println('2's doplněk: ' + dvojky); } // Kód ovladače public static void main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Tento kód přispěl Rajput-Ji> |
>
>
linux který
Python3
rekurze java
# 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#
// 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,dwos.Length-( i+1)); } else { twos = twos.Substring(0, i) + '1' + twos.Substring(i + 1,dwos.Length-(i+1)); přestávka; } } // If No break : všechny jsou 1 jako v 111 nebo 11111; // v takovém případě přidejte na začátek 1 navíc if (i == -1) { twos = '1' + twos; } Console.WriteLine('1's doplněk: ' + jedničky);; Console.WriteLine('2's doplněk: ' + dvojky); } // Kód ovladače public static void Main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Tento kód přidal 29AjayKumar> |
>
java barvy
>
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 (jedničky[i] == '1') dvojky[i] = '0'; else { twos[i] = '1'; přestávka; } } twos = twos.join('') // If No break : všechny jsou 1 jako v 111 nebo 11111; // v takovém případě přidejte na začátek 1 navíc if (i == -1) twos = '1' + twos; document.write( '1's doplněk: ' + jedničky + ' '); document.write( doplněk '2: ' + dvojky + ' '); } // Program ovladače var bin = '1100'; printOneAndTwosComplement(bin); > |
>
>
Výstup:
1's complement: 0011 2's complement: 0100>
Časová náročnost: Na)
Pomocný prostor: O(1)