Givet et binært tal som en streng, udskriv dets 1'er og 2'er komplementer.
1’s komplement af et binært tal er et andet binært tal opnået ved at skifte alle bits i det, dvs. transformere 0 bit til 1 og 1 bit til 0. I 1's komplementformat forbliver de positive tal uændrede. De negative tal opnås ved at tage 1’erens komplement af positive modparter.
for eksempel vil +9 blive repræsenteret som 00001001 i otte-bit notation og -9 vil blive repræsenteret som 11110110, som er 1'erens komplement til 00001001.
Eksempler:
1's complement of '0111' is '1000' 1's complement of '1100' is '0011'>
2’s komplement af et binært tal er 1, tilføjet til 1-komplementet af det binære tal. I 2'erens komplementrepræsentation af binære tal repræsenterer MSB tegnet med et '0' brugt til plustegn og et '1' brugt til et minustegn. de resterende bits bruges til at repræsentere størrelsen. positive størrelser repræsenteres på samme måde som i tilfælde af fortegn-bit eller 1's komplementrepræsentation. Negative størrelser er repræsenteret ved 2'ernes komplement af deres positive modparter.
Eksempler:
erstatte alt
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'>
Et andet trick til at finde tos komplement:
Trin 1: Start fra den mindst signifikante bit og gå til venstre, indtil du finder en 1. Indtil du finder 1, forbliver bits de samme
Trin 2: Når du har fundet 1, så lad 1'eren som den er, og nu
Trin 3: Vend alle de tilbageværende stykker i 1.
Illustration
Antag, at vi skal finde 2s Komplement af 100100
Trin 1: Traverser og lad biddet blive det samme, indtil du finder 1. Her kendes x ikke endnu. Svar = xxxx00 –
Trin 2 : Du fandt 1. Lad det forblive det samme. Svar = xxx100
Trin 3: Vend alle bits til venstre i 1. Svar = 011100.
Derfor er 2s komplementet af 100100 011100.
Anbefalet praksis 1's supplement Prøv det!For ens komplement skal vi simpelthen vende alle bits.
For 2’s komplement finder vi først ens komplement. Vi krydser ens komplement med udgangspunkt i LSB (mindst signifikant bit), og leder efter 0. Vi vender alle 1'ere (ændres til 0), indtil vi finder et 0. Til sidst vender vi det fundne 0. For eksempel er 2's komplement på 01000 11000 (Bemærk at vi først finder ens komplement på 01000 som 10111). Hvis der er alle 1'ere (i ens komplement), tilføjer vi en ekstra 1'er i strengen. For eksempel er 2's komplement af 000 1000 (1's komplement af 000 er 111).
Nedenfor er implementeringen.
C++
document.queryselector
// 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 (ones[i] == '1') toere[i] = '0'; else { twos[i] = '1'; pause; } } // Hvis ingen pause: alle er 1 som i 111 eller 11111; // i et sådant tilfælde skal du tilføje ekstra 1 i begyndelsen, hvis (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; }> |
>
>
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); pause; } } // Hvis ingen pause: alle er 1 som i 111 eller 11111; // i et sådant tilfælde skal du tilføje ekstra 1 i begyndelsen, hvis (i == -1) { twos = '1' + twos; } System.out.println('1's komplement: ' + enere);; System.out.println('2's komplement: ' + toere); } // Driverkode public static void main(String[] args) { String bin = '1100'; printOneAndTosComplement(bin); } } // Denne kode bidraget af Rajput-Ji> |
>
det er
>
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#
grundlæggende 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 (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)); pause; } } // Hvis ingen pause: alle er 1 som i 111 eller 11111; // i et sådant tilfælde skal du tilføje ekstra 1 i begyndelsen, hvis (i == -1) { twos = '1' + twos; } Console.WriteLine('1's komplement: ' + enere);; Console.WriteLine('2's komplement: ' + toere); } // Driverkode offentlig statisk void Main(String[] args) { String bin = '1100'; printOneAndTosComplement(bin); } } // Denne kode er blevet bidraget af 29AjayKumar> |
>
c++ streng split
>
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 (ones[i] == '1') toere[i] = '0'; else { twos[i] = '1'; pause; } } twos = twos.join('') // Hvis ingen pause: alle er 1 som i 111 eller 11111; // i et sådant tilfælde skal du tilføje ekstra 1 i begyndelsen, hvis (i == -1) twos = '1' + twos; document.write( '1's komplement: ' + enere + ' '); document.write( '2's komplement: ' + toere + ' '); } // Driverprogram var bin = '1100'; printOneAndTosComplement(bin);> |
>
>
Produktion:
1's complement: 0011 2's complement: 0100>
Tidskompleksitet: På)
Hjælpeplads: O(1)