Gegeven een binair getal als een string, druk dan de 1-en en 2-complementen af.
1’s complement van een binair getal is een ander binair getal dat wordt verkregen door alle bits erin om te wisselen, dat wil zeggen door het 0-bit naar 1 en het 1-bit naar 0 te transformeren. In het 1-complementformaat blijven de positieve getallen ongewijzigd. De negatieve getallen worden verkregen door het 1-complement van positieve tegenhangers te nemen.
+9 wordt bijvoorbeeld weergegeven als 00001001 in acht-bits notatie en -9 wordt weergegeven als 11110110, wat het 1-complement is van 00001001.
Voorbeelden:
1's complement of '0111' is '1000' 1's complement of '1100' is '0011'>
2’s complement van een binair getal is 1, opgeteld bij het 1-complement van het binaire getal. In de 2-complementweergave van binaire getallen vertegenwoordigt de MSB het teken met een ‘0’ voor plusteken en een ‘1’ voor minteken. de overige bits worden gebruikt om de grootte weer te geven. positieve grootheden worden op dezelfde manier weergegeven als in het geval van tekenbit- of 1-complementrepresentatie. Negatieve grootheden worden weergegeven door het 2-complement van hun positieve tegenhangers.
Voorbeelden:
regexp_like in mysql
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'>
Nog een truc om het complement van twee te vinden:
Stap 1: Begin met het minst significante bit en ga naar links totdat je een 1 vindt. Tot je een 1 vindt, blijven de bits hetzelfde
Stap 2: Als je er 1 hebt gevonden, laat je de 1 zoals hij is, en nu
Stap 3: Draai alle resterende bits om in de 1.
Illustratie
Stel dat we 2s-complement van 100100 moeten vinden
Stap 1: Beweeg en laat het bit hetzelfde blijven totdat je 1 vindt. Hier is x nog niet bekend. Antwoord = xxxx00 –
Stap 2 : Je hebt er 1 gevonden. Laat het hetzelfde blijven. Antwoord = xxx100
Stap 3: Draai alle overgebleven bits om in de 1. Antwoord = 011100.
Het 2s-complement van 100100 is dus 011100.
Aanbevolen aanvulling van praktijk 1 Probeer het!Voor iemands complement hoeven we alleen maar alle bits om te draaien.
Voor het complement van 2 vinden we eerst het complement van iemand. We doorlopen het complement van de ene, beginnend bij LSB (minst significante bit), en zoeken naar 0. We draaien alle 1-en om (veranderen naar 0) totdat we een 0 vinden. Ten slotte draaien we de gevonden 0 om. Het 2-complement van 01000 is bijvoorbeeld 11000 (Merk op dat we eerst iemands complement van 01000 vinden als 10111). Als er allemaal 1-en zijn (in iemands complement), voegen we een extra 1 toe aan de string. Het 2-complement van 000 is bijvoorbeeld 1000 (het 1-complement van 000 is 111).
Hieronder vindt u de implementatie.
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; ik--) { als (enen[i] == '1') tweeën[i] = '0'; anders { tweeën[i] = '1'; pauze; } } // Indien geen onderbreking: ze zijn allemaal 1 zoals in 111 of 11111; // voeg in dat geval extra 1 toe aan het begin als (i == -1) tweeën = '1' + tweeën; uit<< '1's complement: ' << ones << endl; cout << '2's complement: ' << twos << endl; } // Driver program int main() { string bin = '1100'; printOneAndTwosComplement(bin); return 0; }> |
>
>
primitieve gegevenstypen in Java
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') { tweeën = tweeën.substring(0, i) + '0' + tweeën.substring(i + 1); } else { tweeën = tweeën.substring(0, i) + '1' + tweeën.substring(i + 1); pauze; } } // Indien geen onderbreking: ze zijn allemaal 1 zoals in 111 of 11111; // voeg in dat geval extra 1 toe aan het begin if (i == -1) { tweeën = '1' + tweeën; } System.out.println('1's complement: ' + degenen);; System.out.println('2's complement: ' + tweeën); } // Stuurprogrammacode public static void main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Deze code is bijgedragen door Rajput-Ji> |
>
>
typoscript foreach lus
Python3
C#
# 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') { tweeën = tweeën.Substring(0, i) + '0' + tweeën.Substring(i + 1,tweeën.Lengte-( ik+1)); } else { tweeën = tweeën.Substring(0, i) + '1' + tweeën.Substring(i + 1,tweeën.Lengte-(i+1)); pauze; } } // Indien geen onderbreking: ze zijn allemaal 1 zoals in 111 of 11111; // voeg in dat geval extra 1 toe aan het begin if (i == -1) { tweeën = '1' + tweeën; } Console.WriteLine('1's complement: ' + degenen);; Console.WriteLine('2's complement: ' + tweeën); } // Stuurprogrammacode public static void Main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Deze code is bijgedragen door 29AjayKumar> |
>
Java-tekenreeks aaneengeschakeld
>
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; ik--) { als (enen[i] == '1') tweeën[i] = '0'; anders { tweeën[i] = '1'; pauze; } } twos = twos.join('') // Indien geen break: ze zijn allemaal 1 zoals in 111 of 11111; // voeg in dat geval extra 1 toe aan het begin als (i == -1) tweeën = '1' + tweeën; document.write( '1's complement: ' + enen + ' '); document.write( '2's complement: ' + tweeën + ' '); } // Stuurprogramma var bin = '1100'; printOneAndTwosComplement(bin);> |
>
>
Uitgang:
1's complement: 0011 2's complement: 0100>
Tijdcomplexiteit: Op)
Hulpruimte: O(1)