Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Welcome!
Welcome to this new playground about the BF language. Make sure you already read
- Getting started with BrainFuck
- BrainFuck part 2 - Working with arrays
- BrainFuck part 3 - Write a BF interpreter in BF
playgrounds if you didn't already !
The goal of this playground is to play with maths a bit more. Let's start with something simple : read a number.
In all the previous playground steps, data were read as "chars", mapped to ASCII values, but what if we want to type 123 and have a value 123 (instead of 3 chars)?
Let's start
- Memory: 0, 0, 0, 0
- Cursor: on first cell
- Input: a decimal number
Process
- invariant : first cell is the actually read number
- Read next digit on second cell
- While a digit has been read
- Convert char into digit (-48)
- Multiply number of first cell by ten
- Add second cell to first
- More exactly : add first cell 9 times to the second (needs less extra memory)
- then add second to first
- loop
- first cell : the decimal number
Code
>, read next digit on second cell
[ while digit is read
>++++++[-<-------->] convert into digit
>+++++++++[ do 9 times
<<<[->+>+<<] add first cell to second and create a save copy
>>[-<<+>>] put save copy back on first cell
>-] loop (9 times)
<<[-<+>], add second to first then read next digit
]< loop
Minified version
>,[>++++++[-<-------->]>+++++++++[<<<[->+>+<<]>>[-<<+>>]>-]<<[-<+>],]<
Final state
- Memory: N, 0, 0, 0
- Cursor: on N
- Input: empty
- Output: unchanged
Test program
This very basic program reads ASCII code and prints it
>,[>++++++[-<-------->]>+++++++++[< read number
<<[->+>+<<]>>[-<<+>>]>-]<<[-<+>],]< ** part 2 **
. print as ASCII code
Try with inputs from 65 to 90 for example to have all uppercased letters
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content