logo

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:

json w przykładzie json
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; }>

>

Pete'a Davidsona
>

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>

>

przykład klasy Java

>

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#


lista.sortuj Java



// 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>

>

normalne formy

>

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)