Albedo

Joined 24 August 2022
no edit summary
No edit summary
No edit summary
Line 55:
|
+————————————————————————————————— !1=0 (Sequence begins at 0)
 
 
==Binary Digits==
[[Binary Digits]]
 
[Image:https://copy.com/Ixp3nc7QJQTCrcDb]
 
Program flow:
 
2Xn=2X/=1X!>#?N=1X
. . 2 . >
. @ X . .
. X1X2%X2@X1 . .
? . .
C+=X5............#
. .
....
 
Example, with stack and output, for base-10 number 3:
 
1 1 \n | Output
———————————————————————————————————————————————————————————+———————
10 | Stack
10 1 1 2 0 000 |
2 1 111 2 2 2 2 2 1 100 0000 1 |
3 311 1111 1 13 31 1 111 111 11111 1 10 1 5 |
33 333 3333 3 31 11 1 111 111 1111111 111 2 21 55 10 |
222 222 2222 2 22 22 2 222 222 2222222 22222 222 22 2 2 |
———————————————————————————————————————————————————————————+
2Xn=2X/=1X!>#2X1X@2X%2X1X@=2X/=1X!>#?N=1X>#N=1X>#5X= + C ? ... 2Xn=2X ... (return to beginning)
The program executes short division with remainder.
 
l0: 2X : acts as marker for the end of the binary output
n : input base-10 number
l1: = : duplicate number
2X/= : divide n by 2 and duplicate the result
1X!>#: is the result >0? (is n>=2?) It is, thus rotate the pointer by 1 (downwards, l2) and go through the loop
2X1X@: move the result down (needed for further processing), and move n to the top of the stack
2X% : n mod 2 (remainder, last binary digit)
2X1X@: move binary digit down, move result of division up
loop is finished, back to the beginning (l1)
l1: = : duplicate result of division
2X/= : divide n by 2 and duplicate the result
1X!>#: is the result >0? (is n>=2?) It is not, thus don’t rotate the pointer and move on (to l3)
? : pop division result from the stack
l3: N : output first bit: 1 (1*2^1)
= : duplicate next bit
1X># : is top of stack >1? It isn’t (end marker check). Thus, back to beggining of loop (l3)
N : output next bit: 1 (1*2^0)
= : duplicate next bit (which, in this case, is the marker)
1X># : is top of stack >1? It is (end marker reached). Thus, move on to (l4)
l4: 5X=+ : 5+5=10, 10 is the ASCII value for the newline character (\n)
C? : output top of stack as character (newline) and pop the marker. End reached, leading back to (l0)
l0: 2Xn=2X/=...........
 
Flow diagram, with labels l0 to l3:
 
l0 l1 l3
↓ ↓ ↓
2Xn=2X/=1X!>#?N=1X
. . . . .
. . l2→2 . >
. @ X . .
. X1X2%X2@X1 . .
? . .
C+=X5............#
↑ . .
l4 ....
136

edits