作者:
HuangJC (吹笛牧童)
2017-05-28 01:14:34哥的第二篇肺文就在這裡好了
想當年,我最先學的是 Apple II 的 basic
的山寨,小教授二號
那時有 if .. then, 但並沒說 true 是 1
b = 1;
a = (b == 1);
這樣的式子,在 basic 不存在
但後來學了 c, 再學了 16 位元下的 qbasic
(為什麼要回頭學?因為自修,再加上同學問問題的順序
還有老師上課教什麼.. 反正就變成要回頭學了)
喔,我有學長把 c 寫得很像 pascal
也有學長把 pascal 寫得很像 c
XDDDDD
C 有函式,一次取代了函數與算式
那個學長就只用函數,當不想有傳回值時,就隨便用個變數去接
大概是這樣,詳細我忘了
總之,我在 qbasic 下,記得是可以把 true false 變成數字了
但是,true 是 -1
XDDDDDD
誰跟你說 true 一定是 1
在 C,可能會說,只要不是 0 就是 true
( 所以 true 和 false 的機率不一樣大啊~)
但在那個 basic (因為我不記得是不是 qbasic 了,所以就說得含糊點好了)
是認為,false 是 00000000 ,二進位
true 是 11111111 , 二進位
全是 1,在 signed 數字系統裡,是 -1 沒錯
(對了,在 unsigned 系統裡,它是 255,這很糟糕
在意識到用二進位去解釋它之前,我完全覺得這是個亂數,來亂的)
嗯,所以就是 -1 了
因為這樣還引起我不少 bug
因為那時,我已經習慣 true 是 1 並且加以計算了
比如
a = 3 + (b == 2) + (c == 3) * 5;
把布林值看成數字並參與計算,可以在一個算式裡完成很多事
但如果 true 是 -1, 那一切都會在你意料之外,對吧~
記得在一本書,提到怎麼減少程式設計的 bug 裡有提到
不要寫這種程式,因為有風險,有可攜性的問題