Four bit adder: Difference between revisions
Content added Content deleted
(→{{header|PicoLisp}}: Added PureBasic) |
|||
Line 933: | Line 933: | ||
: (4bitsAdder T T T T NIL NIL NIL T) |
: (4bitsAdder T T T T NIL NIL NIL T) |
||
-> (T NIL NIL NIL NIL)</pre> |
-> (T NIL NIL NIL NIL)</pre> |
||
=={{header|PureBasic}}== |
|||
<lang PureBasic>;Because no representation for a solitary bit is present, bits are stored as bytes. |
|||
;Output values from the constructive building blocks is done using pointers (i.e. '*'). |
|||
Procedure.b notGate(x) |
|||
ProcedureReturn ~x |
|||
EndProcedure |
|||
Procedure.b xorGate(x,y) |
|||
ProcedureReturn (x & notGate(y)) | (notGate(x) & y) |
|||
EndProcedure |
|||
Procedure halfadder(a, b, *sum.Byte, *carry.Byte) |
|||
*sum\b = xorGate(a, b) |
|||
*carry\b = a & b |
|||
EndProcedure |
|||
Procedure fulladder(a, b, c0, *sum.Byte, *c1.Byte) |
|||
Protected sum_ac.b, carry_ac.b, carry_sb.b |
|||
halfadder(c0, a, @sum_ac, @carry_ac) |
|||
halfadder(sum_ac, b, *sum, @carry_sb) |
|||
*c1\b = carry_ac | carry_sb |
|||
EndProcedure |
|||
Procedure fourbitsadder(a0, a1, a2, a3, b0, b1, b2, b3 , *s0.Byte, *s1.Byte, *s2.Byte, *s3.Byte, *v.Byte) |
|||
Protected.b c1, c2, c3 |
|||
fulladder(a0, b0, 0, *s0, @c1) |
|||
fulladder(a1, b1, c1, *s1, @c2) |
|||
fulladder(a2, b2, c2, *s2, @c3) |
|||
fulladder(a3, b3, c3, *s3, *v) |
|||
EndProcedure |
|||
;// Test implementation, map two 4-character strings to the inputs of the fourbitsadder() and display results |
|||
Procedure.s test_4_bit_adder(a.s,b.s) |
|||
Protected.b s0, s1, s2, s3, v, i |
|||
Dim a.b(3) |
|||
Dim b.b(3) |
|||
For i = 0 To 3 |
|||
a(i) = Val(Mid(a, 4 - i, 1)) |
|||
b(i) = Val(Mid(b, 4 - i, 1)) |
|||
Next |
|||
fourbitsadder(a(0), a(1), a(2), a(3), b(0), b(1), b(2), b(3), @s0, @s1, @s2, @s3, @v) |
|||
ProcedureReturn a + " + " + b + " = " + Str(s3) + Str(s2) + Str(s1) + Str(s0) + " overflow " + Str(v) |
|||
EndProcedure |
|||
If OpenConsole() |
|||
PrintN(test_4_bit_adder("0110","1110")) |
|||
Print(#CRLF$ + #CRLF$ + "Press ENTER to exit") |
|||
Input() |
|||
CloseConsole() |
|||
EndIf</lang> |
|||
Sample output: |
|||
<pre>0110 + 1110 = 0100 overflow 1</pre> |
|||
=={{header|Python}}== |
=={{header|Python}}== |