Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
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)?
- Memory: 0, 0, 0, 0
- Cursor: on first cell
- Input: a decimal number
- 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
- first cell : the decimal number
>, 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
- Memory: N, 0, 0, 0
- Cursor: on N
- Input: empty
- Output: unchanged
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