Heim > Artikel > Backend-Entwicklung > Bitweise rekursive Addition zweier Ganzzahlen in C
In dieser Frage werden uns zwei Zahlen gegeben. Unsere Aufgabe besteht darin, ein C-Programm zur bitweisen rekursiven Addition zweier Ganzzahlen zu erstellen.
Die Logik des Summierens mithilfe bitweiser Operationen ähnelt der, die wir im Vorschulalter gemacht haben. Zum Summieren addieren wir normalerweise jede Ziffer der Zahl, und wenn ein Übertrag vorhanden ist, addieren wir ihn zur nächsten Zahl.
Wir werden etwas Ähnliches tun, indem wir den XOR-Operator zum Summieren und den AND-Operator zur Übertragsprüfung verwenden. Wenn es einen Übertrag gibt, addieren wir ihn wieder zur Zahl, andernfalls nicht.
Das ist die Logik des Halbaddierers, die Sie wahrscheinlich in der digitalen Elektronik gelernt haben. Siehe hier...
Jetzt wird die Summe mithilfe von a^b berechnet, d. h. XOR b. Wenn das erste Bit von beiden gesetzt ist, müssen wir prüfen, ob ein zusätzlicher Übertrag weitergegeben werden muss. Wir müssen der Zahl ein zusätzliches Einstellungsbit hinzufügen.
Die bitweise Arithmetik lautet also:
Schritt 1 – Finden Sie das XOR von a und b, d. h. a^b, und speichern Sie es in der Ergebnisvariablen.
Schritt 2 – Überprüfen Sie, ob {(a & b)
Schritt 2.1 – Wenn gleich 0, drucken Sie das Ergebnis aus, das das Endergebnis ist.
Schritt 2.2 – Wenn ungleich 0 gleich 0 ist, fahren Sie mit Schritt 1 fort, wobei a = {(a & b)
Prozeduraler Algorithmus, der die Funktionsweise dieser Funktion veranschaulicht –
Live-Demonstration
#include <stdio.h> int addNumbers(int a, int b) { int carry = (a & b) << 1; int result = a^b; if (carry == 0) return result; else addNumbers(carry, result); } int main(){ int a = 54, b = 897; printf("The sum of %d and %d using bitwise adding is %d", a, b, addNumbers(a, b)); return 0; }
The sum of 54 and 897 using bitwise adding is 951’
Das obige ist der detaillierte Inhalt vonBitweise rekursive Addition zweier Ganzzahlen in C. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!