Uzupełnienie 1 i 2 liczby binarnej

Biorąc pod uwagę liczbę binarną jako ciąg znaków, wypisz jej uzupełnienia do 1 i 2.

uzupełnienie 1 liczby binarnej to inna liczba binarna uzyskana przez przełączenie wszystkich jej bitów, tj. przekształcenie bitu 0 na 1 i bitu 1 na 0. W formacie uzupełnienia do jedynki liczby dodatnie pozostają niezmienione. Liczby ujemne uzyskuje się poprzez uzupełnienie do 1 dodatnich odpowiedników.

na przykład +9 będzie reprezentowane jako 00001001 w notacji ośmiobitowej, a -9 będzie reprezentowane jako 11110110, co stanowi uzupełnienie 1 do 00001001.

Przykłady:

1's complement of '0111' is '1000' 1's complement of '1100' is '0011' 

uzupełnienie 2 liczby binarnej wynosi 1, dodane do uzupełnienia 1 liczby binarnej. W reprezentacji liczb binarnych z uzupełnieniem do 2 MSB reprezentuje znak z „0” używanym jako znak plus i „1” używanym jako znak minus. pozostałe bity służą do reprezentowania wielkości. wielkości dodatnie są reprezentowane w taki sam sposób, jak w przypadku reprezentacji bitu znaku lub uzupełnienia do jedynki. Wielkości ujemne są reprezentowane przez uzupełnienie dwójek ich dodatnich odpowiedników.

Przykłady:

2's complement of '0111' is '1001' 2's complement of '1100' is '0100' 

Kolejna sztuczka, aby znaleźć uzupełnienie do dwójki:

Krok 1: Zacznij od najmniej znaczącego bitu i przesuwaj się w lewo, aż znajdziesz 1. Dopóki nie znajdziesz 1, bity pozostają takie same

Krok 2: Gdy już znajdziesz 1, pozostaw 1 takim, jakie jest, i teraz

Krok 3: Zamień wszystkie pozostałe bity na 1.

Ilustracja

Załóżmy, że musimy znaleźć uzupełnienie 2s liczby 100100

Krok 1: Przejdź i pozwól, aby bit pozostał taki sam, aż znajdziesz 1. Tutaj x nie jest jeszcze znane. Odpowiedź = xxxx00 –

Krok 2 : Znalazłeś 1. Niech tak pozostanie. Odpowiedź = xxx100

Krok 3: Odwróć wszystkie pozostałe bity do 1. Odpowiedź = 011100.

Zatem uzupełnienie 2s liczby 100100 wynosi 011100.

Zalecana praktyka Uzupełnienie 1 Wypróbuj!

Aby uzyskać uzupełnienie, musimy po prostu odwrócić wszystkie bity.
W przypadku uzupełnienia do 2 najpierw znajdujemy uzupełnienie do jednego. Przechodzimy przez uzupełnienie do jedynki, zaczynając od LSB (najmniej znaczący bit) i szukamy 0. Odwracamy wszystkie jedynki (zmieniamy na 0), aż znajdziemy 0. Na koniec odwracamy znalezione 0. Na przykład uzupełnienie 2 do 01000 to 11000 (Zauważ, że najpierw znajdujemy uzupełnienie 01000 jako 10111). Jeśli w dopełnieniu znajdują się wszystkie jedynki, dodajemy dodatkową jedynkę w ciągu. Na przykład uzupełnienie 2 do 000 wynosi 1000 (uzupełnienie 1 do 000 wynosi 111).

Poniżej realizacja.

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 (jedynki[i] == '1') dwójki[i] = '0'; else { dwójki[i] = '1'; przerwa; } } // Jeśli nie ma przerwy: wszystkie mają wartość 1, jak w przypadku 111 lub 11111; // w takim przypadku dodaj dodatkową 1 na początku if (i == -1) dwójki = '1' + dwójki; cout < < '1's complement: ' < < ones < < endl; cout < < '2's complement: ' < < twos < < endl; } // Driver program int main() { string bin = '1100'; printOneAndTwosComplement(bin); return 0; }>

Jawa




// 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') { dwójki = dwójki.substring(0, i) + '0' + dwójki.substring(i + 1); } else { dwójki = dwójki.podciąg(0, i) + '1' + dwójki.podciąg(i + 1); przerwa; } } // Jeśli nie ma przerwy: wszystkie mają wartość 1, jak w przypadku 111 lub 11111; // w takim przypadku dodaj dodatkową 1 na początku if (i == -1) { dwójki = '1' + dwójki; } System.out.println('Dopełnienie 1: ' + jedynki);; System.out.println(Dopełnienie '2: ' + dwójki); } // Kod sterownika public static void main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Ten kod został napisany przez 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#




// 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 (jedynki[i] == '1') { dwójki = dwójki.Podciąg(0, i) + '0' + dwójki.Podciąg(i + 1,dwójki.Długość-( i+1)); } else { dwójki = dwójki.Podciąg(0, i) + '1' + dwójki.Podciąg(i + 1, dwójki.Długość-(i+1)); przerwa; } } // Jeśli nie ma przerwy: wszystkie mają wartość 1, jak w przypadku 111 lub 11111; // w takim przypadku dodaj dodatkową 1 na początku if (i == -1) { dwójki = '1' + dwójki; } Console.WriteLine('Dopełnienie 1: ' + jedynki);; Console.WriteLine(Dopełnienie '2: ' + dwójki); } // Kod sterownika public static void Main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Ten kod został napisany przez 29AjayKumar>

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 (jedynki[i] == '1') dwójki[i] = '0'; else { dwójki[i] = '1'; przerwa; } } twos = twos.join('') // Jeśli nie ma przerwy: wszystkie mają wartość 1, jak w przypadku 111 lub 11111; // w takim przypadku dodaj dodatkową 1 na początku if (i == -1) dwójki = '1' + dwójki; document.write( 'Dopełnienie 1: ' + jedynki + ' '); document.write( 'Dopełnienie do 2: ' + dwójki + ' '); } // Program sterownika var bin = '1100'; printOneAndTwosComplement(bin);>

Wyjście:

1's complement: 0011 2's complement: 0100 

Złożoność czasowa: NA)

Przestrzeń pomocnicza: O(1)