logo

1er- und 2er-Komplement einer Binärzahl

Geben Sie bei einer gegebenen Binärzahl als Zeichenfolge die Einser- und Zweierkomplemente aus.

1er-Komplement Eine Binärzahl ist eine weitere Binärzahl, die durch Umschalten aller darin enthaltenen Bits erhalten wird, d. h. durch Umwandlung des 0-Bits in 1 und des 1-Bits in 0. Im 1er-Komplementformat bleiben die positiven Zahlen unverändert. Die negativen Zahlen erhält man, indem man das Einserkomplement der positiven Gegenstücke bildet.



Beispielsweise wird +9 in der 8-Bit-Notation als 00001001 dargestellt und -9 wird als 11110110 dargestellt, was dem 1er-Komplement von 00001001 entspricht.

Beispiele:

1's complement of '0111' is '1000' 1's complement of '1100' is '0011'>

2er-Komplement einer Binärzahl ist 1, addiert zum 1er-Komplement der Binärzahl. In der Zweierkomplementdarstellung von Binärzahlen stellt das MSB das Vorzeichen dar, wobei eine „0“ für das Pluszeichen und eine „1“ für das Minuszeichen verwendet wird. Die restlichen Bits werden zur Darstellung der Größe verwendet. Positive Größen werden auf die gleiche Weise dargestellt wie bei der Vorzeichenbit- oder 1er-Komplement-Darstellung. Negative Größen werden durch das Zweierkomplement ihrer positiven Gegenstücke dargestellt.



Beispiele:

Binärbaum in Java
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'>

Ein weiterer Trick, um das Zweierkomplement zu finden:

Schritt 1: Beginnen Sie mit dem niedrigstwertigen Bit und gehen Sie nach links, bis Sie eine 1 finden. Bis Sie 1 finden, bleiben die Bits gleich

Schritt 2: Sobald Sie 1 gefunden haben, lassen Sie die 1 so, wie sie ist, und jetzt



Schritt 3: Drehen Sie alle verbleibenden Bits in die 1.

Illustration

Angenommen, wir müssen das 2er-Komplement von 100100 finden

Schritt 1: Durchqueren Sie das Bit und lassen Sie es gleich bleiben, bis Sie 1 finden. Hier ist x noch nicht bekannt. Antwort = xxxx00 –

Schritt 2 : Du hast 1 gefunden. Lass es gleich bleiben. Antwort = xxx100

Schritt 3: Drehen Sie alle verbleibenden Bits in die 1. Antwort = 011100.

Daher ist das Zweierkomplement von 100100 011100.

Empfohlene Ergänzung zu Übung 1 Probieren Sie es aus!

Für das Einerkomplement müssen wir einfach alle Bits umdrehen.
Für das Zweierkomplement ermitteln wir zunächst das Einerkomplement. Wir durchlaufen das Einerkomplement ausgehend vom LSB (niedrigstwertiges Bit) und suchen nach 0. Wir drehen alle Einsen um (ändern sie in 0), bis wir eine 0 finden. Schließlich kehren wir die gefundene 0 um. Beispielsweise lautet das Zweierkomplement von 01000 11000 (Beachten Sie, dass wir das Komplement von 01000 zunächst als 10111 finden.) Wenn es nur Einsen gibt (im Einerkomplement), fügen wir eine zusätzliche Eins in die Zeichenfolge ein. Beispielsweise ist das 2er-Komplement von 000 1000 (das 1er-Komplement von 000 ist 111).

Nachfolgend finden Sie die Implementierung.

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'; else { twos[i] = '1'; brechen; } } // Wenn keine Pause: alle sind 1 wie in 111 oder 11111; // in diesem Fall am Anfang eine zusätzliche 1 hinzufügen if (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; }>

>

>

Amrita Rao Schauspielerin

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); brechen; } } // Wenn keine Pause: alle sind 1 wie in 111 oder 11111; // in diesem Fall am Anfang eine zusätzliche 1 hinzufügen if (i == -1) { twos = '1' + twos; } System.out.println('1's Komplement: ' + Einsen);; System.out.println('2's Komplement: ' + Twos); } // Treibercode public static void main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Dieser Code wurde von Rajput-Ji beigesteuert>

>

>

3D in Autocad

Python3




Indische Schauspielerin Rani Mukerji
# 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') { 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)); brechen; } } // Wenn keine Pause: alle sind 1 wie in 111 oder 11111; // in diesem Fall am Anfang eine zusätzliche 1 hinzufügen if (i == -1) { twos = '1' + twos; } Console.WriteLine('1's Komplement: ' + Einsen);; Console.WriteLine('2's Komplement: ' + Twos); } // Treibercode public static void Main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Dieser Code wurde von 29AjayKumar>'> beigesteuert

> 

.entspricht Java




> > // 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'; else { twos[i] = '1'; brechen; } } twos = twos.join('') // Wenn kein Break: alle sind 1 wie in 111 oder 11111; // in diesem Fall am Anfang eine zusätzliche 1 hinzufügen if (i == -1) twos = '1' + twos; document.write( '1's Komplement: ' + Einsen + ' '); document.write( '2's Komplement: ' + Twos + ' '); } // Treiberprogramm var bin = '1100'; printOneAndTwosComplement(bin);>

>

>

Ausgabe:

1's complement: 0011 2's complement: 0100>

Zeitkomplexität: An)

Hilfsraum: O(1)