1 Bit Addierer



  • Hi, ich soll einen 1 Bit Addierer in c++ verfassen, habe aber keine Ahnung wie ich die drei Funktionen realisieren soll (AND,XOR,OR) bzw mit welcher Schleife, wäre nett wenn jemand mir den Ansatz verraten könnte, nichts weiter.Meine nicht die c++ Ausdrücke dafür (&, |, ^) ,ich könnte es ja einfach für die 8 Möglichkeite einzeln schreiben, macht aber keinen Sinn.
    Danke



  • guckst du erstmal hier: http://de.wikipedia.org/wiki/Halbaddierer
    die summe ist ja einfach nur 'a xor b'
    und den übertrag haste wenn 'a & b == 1'



  • Danke erstmal für die Hilfe, aber scon bei dieser Ausführung geht es nicht mehr weiter, das Programm verlässt die erste Bedingung nicht mehr.

    #include <iostream>
    using namespace std;

    int main ()
    {
    int c,b,a,s,ue;

    cout <<"Uebertrag"<<endl;
    cin >> c;

    cout <<"Summand"<<endl;
    cin >> b;

    cout <<"Summand"<<endl;
    cin >> a;

    if ((a || b ||c < 0 ) && (a || b || c > 1))
    {
    cout <<"Gib nur 1 oder 0 ein";
    }

    else((a || b ||c = 0 ) && (a || b || c = 1))
    {
    ue=((b & a & !c) | (!b & a & c) | (b & !a & c) | (b & a & c )) ;
    }
    cout << ue;
    }



  • probier mal dies:

    typedef struct __adder
    {
    	unsigned in1 :1;
    	unsigned in2 :1;
    	unsigned sum :1;
    	unsigned carry :1;
    } adder_t;
    
    adder_t adder (adder_t a)
    {
    	a.sum = a.in1 ^ a.in2;
    	a.carry = a.in1 & a.in2;
    	return a;
    }
    

    anwenden kannstes dann so:

    ...
    	adder_t input;
    	adder_t result;
    
    	input.in1 = 0;  // 0 oder 1
    	input.in2 = 1;  // 0 oder 1
    	result = adder (input);
    ...
    

    in result.sum und result.carry steht dann das ergebnis...



  • Habe einfach zu abstrakt gedacht die Lösung war ganz einfach, diese nämlich, danke dir trotzdem . Werde sicherlich öfters noch hilfe brauchen. Danke

    #include <iostream>
    using namespace std;

    int main ()
    {
    int c,b,a,s,ue;

    cout <<"Uebertrag"<<endl;
    cin >> c;

    cout <<"Summand"<<endl;
    cin >> b;

    cout <<"Summand"<<endl;
    cin >> a;

    s=(a ^ b) ^ (c);
    cout << "Die Summe ist :" << s<< endl;

    ue=((a | b) & c) | (a & b) ;
    cout << "Der Uebertrag ist:" << ue;
    }



  • wärs nicht vllt. sogar besser bool Variablen zu nehmen? Dann kommen auch keine Ergebnisse wie 2 raus. Oder wird das durch das :1 hinter den unsigned variablen ausgedrückt?

    PS: Coole Band. Machen Live ordentlich Lärm 😉



  • Xul schrieb:

    wärs nicht vllt. sogar besser bool Variablen zu nehmen? Dann kommen auch keine Ergebnisse wie 2 raus. Oder wird das durch das :1 hinter den unsigned variablen ausgedrückt?

    dieses ':irgendwas' legt fest, wieviele bits benutzt werden sollen für die membervariable. aber klar, mit 'bool' geht's natürlich auch...


Anmelden zum Antworten