C’est un petit défi que je m’était donné, comprendre conment un peut faire une addition avec seulement des OR et des AND. J ai dessiner des transistor et j’ai voulu les tester avec des transistors virtuels. Bien que j’aille trouver dans les livre une version pas mal plus simple du circuit, je suis quand même fier de moi d’avoir trouver quelque chose qui marchait tout seul, même si c’est loin d’être efficace.
————————–
package logicAdder;
public class AdderUnit {
// Additioneur logique revision 1 20100521, par David Bernard, dbernard456@gmail.com
public static boolean[] calculateSum (boolean inputA[], boolean inputB[], int outputLength) {
boolean output[] = new boolean[outputLength];
boolean buffer[] = new boolean[2];
boolean remain = false;
for(int i = 0; i < outputLength; i++) {
buffer = AdderUnit.compute(inputA[i], inputB[i], remain);
output[i] = buffer[0];
remain = buffer[1];
}
return output;
}
private static boolean[] compute(boolean a, boolean b, boolean c) {
boolean output[] = new boolean[2];
boolean midVal = AdderUnit.allTrueUnit(a, b, c);
boolean[] leftVal = AdderUnit.sumBody(a, b, c);
boolean[] rightVal = AdderUnit.residBody(a, b, c);
output[0] = AdderUnit.orUnit(leftVal, midVal);
output[1] = AdderUnit.orUnit(rightVal, midVal);
return output;
}
private static boolean[] sumBody(boolean a, boolean b, boolean c) {
boolean output[] = new boolean[3];
output[0] = AdderUnit.sumUnit(a, b, c);
output[1] = AdderUnit.sumUnit(b, c, a);
output[2] = AdderUnit.sumUnit(c, a, b);
return output;
}
private static boolean[] residBody(boolean a, boolean b, boolean c) {
boolean output[] = new boolean[3];
output[0] = AdderUnit.residUnit(b, c, a);
output[1] = AdderUnit.residUnit(c, a, b);
output[2] = AdderUnit.residUnit(a, b, c);
return output;
}
private static boolean residUnit(boolean input1,boolean input2, boolean input3){
boolean buffer = false;
if(input1 && input2) buffer = true;
if(buffer && !input3)
return true; else return false;
}
private static boolean sumUnit(boolean input1, boolean input2,boolean input3){
boolean buffer = false;
if(input1 || input2) buffer = true;
if(!buffer && input3)
return true; else return false;
}
private static boolean allTrueUnit(boolean input1,boolean input2,boolean input3){
boolean buffer = false;
if(input1 && input2) buffer = true;
if(buffer && input3)
return true; else return false;
}
private static boolean orUnit(boolean[] args, boolean input) {
boolean buffer[] = new boolean[2];
if(args[0] || args[1])
buffer[0] = true; else buffer[0] = false;
if(args[2] || input)
buffer[1] = true; else buffer[1] = false;
if(buffer[0] || buffer[1])
return true; else return false;
}
}
Comments
Leave a comment Trackback