Erstellt für das Schulfach TINF
Homepage/Rechnen Bitmanipulation
« HomepageIn diesem Program wird das Addieren bzw. Subtrahieren mit Bitmanipulation durchgeführt. Es wird hier kein + oder - für die Berechnungen benutzt! Es werden auch keine IOs verwendet. Deshalb habe ich hier nicht auf Effizienz gebaut, sondern auf eine saubere Funktion.
#include <mbed.h> Serial pc(USBTX, USBRX); // Verwendete Variabeln unsigned char a = NULL; unsigned char b = NULL; unsigned char sign = NULL; unsigned char result = NULL; // Rechenfunktionen (+, -) unsigned char Addition(unsigned char a, unsigned char b); unsigned char Subtraktion(unsigned char a, unsigned char b); int main() { pc.baud(9600); pc.printf("Zahl mittels ASCII-Tabelle auswählen und Rechenoperation nur +,- akzeptiert!\nViel Spaß ;)\n\n\n"); while(1) { if (pc.readable() && a == NULL && sign == NULL && b == NULL) { // 1. Zahl a = pc.getc(); pc.printf("Die 1. Zahl ist %d (%c)!\n", a, a); // Rechneoperation (+, -) // Wenn kein + oder - gesetzt wird, wird ein neue Eingabe aufgefordert do { while(!pc.readable()) {} sign = pc.getc(); } while(sign != '+' && sign != '-'); pc.printf("Die Rechnung wird %c gerechnet!\n", sign); // 2. Zahl while(!pc.readable()) {} b = pc.getc(); pc.printf("Die 2. Zahl ist %d (%c)!\n\n", b, b); // Berechnen if (sign == '-') { result = Subtraktion(a, b); } else if (sign == '+') { result = Addition(a, b); } pc.printf("%d %c %d = %d\n\n\n", a, sign, b, result); } else { // Alle Werte zurücksetzen a = NULL; b = NULL; sign = NULL; result = NULL; } } } unsigned char Addition(unsigned char a, unsigned char b) { // Exor für Addieren und AND für den Übertrag // Der muss natürlich hinzuaddiert werden (Shift) // Wäre jedoch ein weiterer Übertrag, dann muss der zuerst berücksichtigt werden (z&c) // Dann darf mittels Verodern die Addition beendet werden unsigned char z = a ^ b; unsigned char c = a & b; c <<= 1; while((z&c) > 0) { a = z; b = c; z = a ^ b; c = a & b; c <<= 1; } int result = z | c; return result; } unsigned char Subtraktion(unsigned char a, unsigned char b) { // Mit Einer + Zweierkomplimet und dann Addieren b = ~b; unsigned char c = Addition(b, 1); unsigned char result = Addition(a, c); return result; }