(Προαιρετικά) Με τη χρήση των παραπάνω κλάσεων να υλοποιήσετε
μια κλάση που να προσομοιάζει έναν πλήρη αθροιστή.
Η κλάση αυτή πρέπει να έχει μεθόδους που να θέτουν τις δύο εισόδους και το
κρατούμενο εισόδου καθώς και μεθόδους που να επιστρέφουν το άθροισμα και
το κρατούμενο εξόδου.
Με τη χρήση του πλήρη αθροιστή και τους τελεστές bit της C
μπορεί να υλοποιηθεί μια κλάση αθροιστή ακεραίων αριθμών (wordadder) με
τον παρακάτω τρόπο:
/*
* wordadder.h
*
* D. Spinellis, February 2000
*/
class wordadder {
private:
unsigned int a, b; // Input values
public:
void seta(unsigned int v); // Set input a
void setb(unsigned int v); // Set input b
unsigned int getsum(); // Return sum
};
/*
* wordadder.cpp
*
* D. Spinellis, February 2000
*/
#include "wordadder.h"
#include "fulladder.h"
void
wordadder::seta(unsigned int v)
{
a = v;
}
void
wordadder::setb(unsigned int v)
{
b = v;
}
unsigned int
wordadder::getsum()
{
fulladder fa[sizeof(unsigned int) * 8];
unsigned int i, bit;
unsigned int result = 0;
fa[0].setcarryin(false);
for (i = 0, bit = 1; bit; bit <<= 1, i++) {
fa[i].seta(a & bit);
fa[i].setb(b & bit);
if (bit << 1) // Do carry-over the last bit
fa[i + 1].setcarryin(fa[i].getcarryout());
if (fa[i].getsum())
result |= bit;
}
return (result);
}
Ο αθροιστής αυτός μπορεί να χρησιμοποιηθεί ως εξής:
wordadder add;
int a, b;
cin >> a;
cin >> b;
add.seta(a);
add.setb(b);
cout << a << "+" << b << "=" << add.getsum();
Δοκιμάστε το!