Étant donné un nombre binaire sous forme de chaîne, imprimez ses compléments à 1 et 2.
complément à 1 d'un nombre binaire est un autre nombre binaire obtenu en basculant tous les bits qu'il contient, c'est-à-dire en transformant le bit 0 en 1 et le bit 1 en 0. Dans le format complément à 1, les nombres positifs restent inchangés. Les nombres négatifs sont obtenus en prenant le complément à 1 de leurs homologues positifs.
par exemple, +9 sera représenté par 00001001 en notation sur huit bits et -9 sera représenté par 11110110, qui est le complément à 1 de 00001001.
Exemples:
1's complement of '0111' is '1000' 1's complement of '1100' is '0011'>
complément à 2 d’un nombre binaire est 1, ajouté au complément à 1 du nombre binaire. Dans la représentation en complément à 2 des nombres binaires, le MSB représente le signe avec un « 0 » utilisé pour le signe plus et un « 1 » utilisé pour un signe moins. les bits restants sont utilisés pour représenter la magnitude. les grandeurs positives sont représentées de la même manière que dans le cas d’une représentation en bit de signe ou en complément à 1. Les grandeurs négatives sont représentées par le complément à 2 de leurs homologues positives.
Exemples:
souligner en utilisant CSS
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'>
Une autre astuce pour trouver le complément à deux :
Étape 1: Commencez par le bit le moins significatif et déplacez-vous vers la gauche jusqu'à ce que vous trouviez un 1. Jusqu'à ce que vous trouviez 1, les bits restent les mêmes.
Étape 2: Une fois que vous avez trouvé 1, laissez le 1 tel quel, et maintenant
Étape 3: Retournez tous les bits restants dans le 1.
Illustration
Supposons que nous devions trouver le complément 2s de 100100
Étape 1: Parcourez et laissez le bit rester le même jusqu'à ce que vous trouviez 1. Ici, x n'est pas encore connu. Réponse = xxxx00 –
Étape 2 : Vous avez trouvé 1. Laissez-le rester le même. Réponse = xxx100
Étape 3: Retournez tous les bits restants dans le 1. Réponse = 011100.
Par conséquent, le complément à 2 de 100100 est 011100.
Complément de la pratique recommandée 1 Essayez-le !Pour compléter, nous devons simplement inverser tous les bits.
Pour le complément à 2, on trouve d’abord son complément à un. Nous parcourons le complément à un en commençant par LSB (bit le moins significatif) et recherchons 0. Nous retournons tous les 1 (passons à 0) jusqu'à ce que nous trouvions un 0. Enfin, nous retournons le 0 trouvé. Par exemple, le complément à 2 de 01000 est 11000 (Notez que nous trouvons d'abord le complément de 01000 comme 10111). S’il y a tous des 1 (dans le complément à un), nous ajoutons un 1 supplémentaire dans la chaîne. Par exemple, le complément à 2 de 000 est 1000 (le complément à 1 de 000 est 111).
Ci-dessous la mise en œuvre.
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 (ones[i] == '1') twos[i] = '0'; sinon { deux[i] = '1'; casser; } } // Si No break : tous valent 1 comme dans 111 ou 11111 ; // dans ce cas, ajoutez 1 supplémentaire au début si (i == -1) deux = '1' + deux ; cout<< '1's complement: ' << ones << endl; cout << '2's complement: ' << twos << endl; } // Driver program int main() { string bin = '1100'; printOneAndTwosComplement(bin); return 0; }> |
>
java convertir un entier en chaîne
>
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); casser; } } // Si No break : tous valent 1 comme dans 111 ou 11111 ; // dans ce cas, ajoutez 1 supplémentaire au début if (i == -1) { twos = '1' + twos; } System.out.println(le complément de '1 : ' + les);; System.out.println (complément de '2 : ' + deux); } // Code du pilote public static void main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Ce code a été contribué par Rajput-Ji> |
>
expression régulière en 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#
tous les 4 mois
// 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-( je+1)); } else { twos = twos.Substring(0, i) + '1' + twos.Substring(i + 1,twos.Length-(i+1)); casser; } } // Si No break : tous valent 1 comme dans 111 ou 11111 ; // dans ce cas, ajoutez 1 supplémentaire au début if (i == -1) { twos = '1' + twos; } Console.WriteLine(Complément de '1 : ' + uns);; Console.WriteLine (complément de '2 : ' + deux); } // Code du pilote public static void Main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Ce code a été contribué par 29AjayKumar> |
>
traitement parallèle
>
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') twos[i] = '0'; sinon { deux[i] = '1'; casser; } } twos = twos.join('') // Si No break : tous valent 1 comme dans 111 ou 11111; // dans ce cas, ajoutez 1 supplémentaire au début si (i == -1) deux = '1' + deux ; document.write( Complément de '1 : ' + uns + ' '); document.write(Complément de '2: ' + deux + ' '); } // Programme pilote var bin = '1100'; printOneAndTwosComplement(bin);> |
>
>
Sortir:
1's complement: 0011 2's complement: 0100>
Complexité temporelle : Sur)
Espace auxiliaire : O(1)