0
想讀一些舊的BASIC代碼做一個端口,碰到這個令人費解的概念來:在函數定義裏分配給arg?
1150 DEF FNB(Q)=Q+8*((Q=9)-(Q=0))
什麼?是怎麼回事?你如何分配給這樣的參數?爲什麼這不等於Q+8*(9-0)
?
我寫了一個小的演示進行調查,但沒有取得任何東西,我預計:
10 DEF FNB(Q)=Q+8*((Q=9)-(Q=0))
20 PRINT FNB(1)
30 PRINT FNB(2)
20 PRINT FNB(3)
30 PRINT FNB(10)
RUN
1
2
3
10
Ok
我必須做一些錯誤的,因爲FNB
不能是一個身份的功能。
有人可以解釋BASIC實際上在這個功能中做了什麼?爲什麼我的演示沒有幫助?
「-1 = NOT 0」(即按位「NOT」,例如「0b111 = NOT 0b000」)。至於爲什麼這樣做,我不知道,除了一些古老的效率原因,現在已經失傳了。我不確定Visual Basic(更新的.NET兼容版本)是否也使得比較結果等於0或-1。順便說一句,用於賦值和相等性測試的'='字符是大多數BASIC方言的特徵,我只能假設它仍然是。 –
啊,一個0的bitflip!這是有道理的,在老派的心態。 GW-BASIC是我所涉及的唯一一種方言,而不是因爲我早在90年代就已經13歲了。我沒有*學習*這個答案,而是突然想起它。 :) –
我很幸運,能夠使用QBASIC作爲我的第一個BASIC語言之一,這是GW-BASIC的一個顯着改進,具有適當的子程序和函數àla Pascal(儘管'DEF FNxxx'和'GOSUB'/RETURN'仍然可用)。無論如何,我很高興你記得現在很多人看起來很奇怪的語法。 :) –