Med ett binärt tal som en sträng, skriv ut dess 1:or och 2:or komplement.
1:s komplement av ett binärt tal är ett annat binärt tal som erhålls genom att växla alla bitar i det, d.v.s. transformera 0-biten till 1 och 1-biten till 0. I 1:ans komplementformat förblir de positiva talen oförändrade. De negativa talen erhålls genom att ta 1:ans komplement av positiva motsvarigheter.
till exempel kommer +9 att representeras som 00001001 i åttabitars notation och -9 kommer att representeras som 11110110, vilket är 1:ans komplement till 00001001.
Exempel:
1's complement of '0111' is '1000' 1's complement of '1100' is '0011'>
2:s komplement av ett binärt tal är 1, adderat till 1:ans komplement till det binära talet. I 2:ans komplementrepresentation av binära tal representerar MSB tecknet med en '0' som används för plustecken och en '1' som används för ett minustecken. de återstående bitarna används för att representera magnituden. positiva magnituder representeras på samma sätt som i fallet med teckenbit eller 1:s komplementrepresentation. Negativa magnituder representeras av 2:ans komplement av deras positiva motsvarigheter.
Exempel:
dfs vs bfs
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'>
Ett annat knep för att hitta tvås komplement:
Steg 1: Börja från den minst signifikanta biten och gå åt vänster tills du hittar en 1. Tills du hittar 1 förblir bitarna desamma
Steg 2: När du har hittat 1, låt 1:an vara som den är, och nu
Steg 3: Vänd alla kvarvarande bitar till 1:an.
Illustration
Anta att vi behöver hitta 2s komplement av 100100
Steg 1: Traversera och låt biten vara densamma tills du hittar 1. Här är x inte känt ännu. Svar = xxxx00 –
Steg 2 : Du hittade 1. Låt det vara detsamma. Svar = xxx100
Steg 3: Vänd alla bitarna kvar till 1. Svar = 011100.
Därför är 2s-komplementet av 100100 011100.
Rekommenderad övning 1:s komplement Prova det!För ens komplement behöver vi helt enkelt vända alla bitar.
För 2:s komplement hittar vi först ens komplement. Vi korsar ettans komplement med start från LSB (minst signifikant bit) och letar efter 0. Vi vänder alla 1:or (ändrar till 0) tills vi hittar en 0. Slutligen vänder vi den hittade 0:an. Till exempel är 2:s komplement till 01000 11000 (Observera att vi först hittar ens komplement av 01000 som 10111). Om det finns alla 1:or (i ens komplement), lägger vi till en extra 1:a i strängen. Till exempel är 2:s komplement av 000 1000 (1s komplement av 000 är 111).
Nedan följer genomförandet.
C++
tkinter ram
// 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 (ettor[i] == '1') tvåor[i] = '0'; else { twos[i] = '1'; ha sönder; } } // Om ingen brytning: alla är 1 som i 111 eller 11111; // i så fall, lägg till extra 1 i början om (i == -1) tvåor = '1' + tvåor; cout<< '1's complement: ' << ones << endl; cout << '2's complement: ' << twos << endl; } // Driver program int main() { string bin = '1100'; printOneAndTwosComplement(bin); return 0; }> |
>
>
Java
klass vs objekt 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') { twos = twos.substring(0, i) + '0' + twos.substring(i + 1); } else { twos = twos.substring(0, i) + '1' + twos.substring(i + 1); ha sönder; } } // Om ingen brytning: alla är 1 som i 111 eller 11111; // i så fall, lägg till extra 1 i början om (i == -1) { twos = '1' + twos; } System.out.println('1's komplement: ' + enor);; System.out.println('2's komplement: ' + tvåor); } // Driver code public static void main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Denna kod bidragit från 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#
sträng av array i 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,twos.Length-( i+1)); } else { twos = twos.Substring(0, i) + '1' + twos.Substring(i + 1,twos.Length-(i+1)); ha sönder; } } // Om ingen brytning: alla är 1 som i 111 eller 11111; // i så fall, lägg till extra 1 i början om (i == -1) { twos = '1' + twos; } Console.WriteLine('1's komplement: ' + enor);; Console.WriteLine('2's komplement: ' + tvåor); } // Driver code public static void Main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Denna kod har bidragit från 29AjayKumar> |
>
binärt träd java
>
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 (ettor[i] == '1') tvåor[i] = '0'; else { twos[i] = '1'; ha sönder; } } twos = twos.join('') // If No break : alla är 1 som i 111 eller 11111; // i så fall, lägg till extra 1 i början om (i == -1) tvåor = '1' + tvåor; document.write( '1's komplement: ' + ettor + ' '); document.write( '2's komplement: ' + tvåor + ' '); } // Drivrutinsprogram var bin = '1100'; printOneAndTwosComplement(bin);> |
>
>
Produktion:
1's complement: 0011 2's complement: 0100>
Tidskomplexitet: På)
Hjälputrymme: O(1)