Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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;
}