--- tags: 學習歷程 --- # Brainfuck --- ~~如果你的性癖比較特殊一點(?)~~,或是你又電又電,又或是你在哪裡得到了什麼神奇小知識,那我想你應該聽過Brainfuck --- ## Brainfuck是什麼 Brainfuck是一種極小化的程式語言,1993年由Urban Müller(一位瑞士工程師)創造 因為fuck是髒話,所以brainfuck會被稱為Brainf\*ck或Brainf\*\*\*或是簡寫BF --- ## Urban Müller的照片 右一為Urban Müller 你看他笑得多麼開心  --- ## 為什麼創造Brainfuck Müller的目標是建立一種簡單的、可以用最小的編譯器來實現的、符合圖靈完全思想的程式語言 這種語言由八種運算子構成,為Amiga機器編寫的編譯器(第二版),只有240個位元組大小 ---- ### 為什麼會叫Brainfuck? 因為他有夠難懂就像在fuck你的大腦 --- ## Brainfuck簡易介紹 接下來介紹一下來Brainfuck裡的八種運算子 ---- ### Brainfuck運算子 | 字元 | 含義 | | -------- | -------- | | > |指標加一 | |< | 指標減一 | | + | 指標指向的位元組的值加一 | | - | 指標指向的位元組的值減一 | | . |輸出指標指向的單元內容(ASCII碼) | | , | 輸入內容到指標指向的單元(ASCII碼) | | \[ | 如果指標指向的單元值為零,向後跳轉到對應的\]指令的次一指令處 | | \] | 如果指標指向的單元值不為零,向前跳轉到對應的\[指令的次一指令處 | ---- ### Brainfuck對應至C語言 | Brainfuck | C | | -------- | -------- | | > |++ptr; | |< | --ptr; | | + | ++\*ptr; | | - | --\*ptr; | | . |putchar(\*ptr); | | , | \*ptr = getchar(); | | \[ | while (\*ptr) \{ | | \] | \} | ---- ### 你各位應該都很熟悉的ASCII碼表  --- ## 使用Brainfuck ### 以下為你展示使用Brainfuck寫的Hello World ```bf= >++++++++[<+++++++++>-]<.>++++[<+++++++>-]<+.+++++++..+++.>>++++++[<+++++++>-]<+ +.------------.>++++++[<+++++++++>-]<+.<.+++.------.--------.>>>++++[<++++++++>- ]<+. ``` ---- 感受到大腦被fuck的感覺了嗎? 我們可以讓這code好看一點,排版一下,降低你的痛苦 ---- 這樣應該有比較好懂一點,每行各代表我們會輸出的字元 ```bf= >++++++++[<+++++++++>-]<. >++++[<+++++++>-]<+. +++++++.. +++. >>++++++[<+++++++>-]<++. ------------. >++++++[<+++++++++>-]<+. <. +++. ------. --------. >>>++++[<++++++++>-]<+. ``` --- 那就讓我們來學如何輸出H吧 ---- ```bf >++++++++[<+++++++++>-]<. ``` 首先右移一格,然後在那格加8次(+) 接下來便進入迴圈( [] ),左移一格回到第0格( < ),在那格加9( + ),再來向右移( > ),將第一格減1( - )。迴圈會執行到儲存格剩0為止,所以迴圈會執行8次,每次都會向第0格加9。 最後輸出( . ),前面執行完,第0格的值為72,對應至ACSII的H,所以輸出H。 ---- 成功輸出H了,那就換e吧 ---- ```bf >++++[<+++++++>-]<+. ``` 接下來應該就好懂多了,因為這就跟我們H時做的差不多,只是第0格的數字不一樣。我們會把28(4乘以7)加到第0格,迴圈結束時會再加1,此時第0格的值為101,對應至ASCII的e ---- ## 結束 接著如何執行後面的,就像上面說的,繼續下去就能輸出Hello World了 恭喜你學會如何Brainfuck了 おめでとう🎉 --- ## 資料來源: * ASCII碼表: https://en.m.wikipedia.org/wiki/File:ASCII-Table-wide.svg * 如何Brainfuck: https://zh.wikipedia.org/wiki/Brainfuck https://therenegadecoder.com/code/hello-world-in-brainfuck/ * Urban Müller: https://www.amigaforever.com/news-events/19981113-computer-98/ ---- ## 額外延伸: * 圖靈完全思想: https://zh.wikipedia.org/wiki/%E5%9C%96%E9%9D%88%E5%AE%8C%E5%82%99%E6%80%A7 * HackMD: https://hackmd.io/@whitebearOuO/Brainfuck
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.