25 lines
696 B
Plaintext
25 lines
696 B
Plaintext
fcn xor(a,b) // a,b are 1|0 -->a^b(1|0)
|
|
{ a.bitAnd(b.bitNot()).bitOr(b.bitAnd(a.bitNot())) }
|
|
|
|
fcn halfAdder(a,b) // -->(carry, a+b) (1|0)
|
|
{ return(a.bitAnd(b), xor(a,b)) }
|
|
|
|
fcn fullBitAdder(c, a,b){ //-->(carry, a+b+c), a,b,c are 1|0
|
|
c1,s := halfAdder(a,c);
|
|
c2,s := halfAdder(s,b);
|
|
c3 := c1.bitOr(c2);
|
|
return(c3,s);
|
|
}
|
|
|
|
// big endian
|
|
fcn fourBitAdder(a3,a2,a1,a0, b3,b2,b1,b0){ //-->(carry, s3,s2,s1,s0)
|
|
c,s0 := fullBitAdder(0, a0,b0);
|
|
c,s1 := fullBitAdder(c, a1,b1);
|
|
c,s2 := fullBitAdder(c, a2,b2);
|
|
c,s3 := fullBitAdder(c, a3,b3);
|
|
return(c, s3,s2,s1,s0);
|
|
}
|
|
|
|
// add(10,9) result should be 1 0 0 1 1 (0x13, 3 carry 1)
|
|
println(fourBitAdder(1,0,1,0, 1,0,0,1));
|