(Προαιρετικά) Με τη χρήση των παραπάνω κλάσεων να υλοποιήσετε
μια κλάση που να προσομοιάζει έναν πλήρη αθροιστή.
Η κλάση αυτή πρέπει να έχει μεθόδους που να θέτουν τις δύο εισόδους και το
κρατούμενο εισόδου (setCarryIn) καθώς και μεθόδους που να επιστρέφουν
το άθροισμα και το κρατούμενο εξόδου.
Με τη χρήση του πλήρη αθροιστή και τους τελεστές bit της Java
μπορεί να υλοποιηθεί μια κλάση αθροιστή ακεραίων αριθμών (wordadder) με
τον παρακάτω τρόπο:
/*
* wordadder.java
*
* D. Spinellis, February 2000, December 2001
*/
import gr.aueb.dds.BIO;
class WordAdder {
private int a, b;
public void setA(int v) { a = v;}
public void setB(int v) {b = v;}
public int getSum() {
FullAdder fa[] = new FullAdder[32];
int i, bit;
int result = 0;
for (i = 0; i < 32; i++)
fa[i] = new FullAdder();
fa[0].setCarryIn(false);
// bit is the bit position to add
for (i = 0, bit = 1; i < 32; bit <<= 1, i++) {
fa[i].setA((a & bit) != 0);
fa[i].setB((b & bit) != 0);
// Propagate carry
if (i < 31)
fa[i + 1].setCarryIn(fa[i].getCarryOut());
// Merge adder output into result
if (fa[i].getSum())
result |= bit;
}
return (result);
}
// Test harness
public static void main(String args[]) {
int a, b;
WordAdder wa = new WordAdder();
BIO.print("a=");
wa.setA(a = BIO.readInt());
BIO.print("b=");
wa.setB(b = BIO.readInt());
BIO.println(a + " + " + b + " = " + wa.getSum());
}
}
Δοκιμάστε το!