Re: [問卦] 幹!為什麼1是true,0是false?消失
哥的第二篇肺文就在這裡好了
想當年,我最先學的是 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 裡有提到
不要寫這種程式,因為有風險,有可攜性的問題
------
java 不允許我這麼做
java 的 true 就是 true, 不是 1,不能參與運算
這好像叫做強型別是吧?
不過可以這樣寫
a = 3 + ((b == 2) ? 1 : 0) + ((c == 3) ? 1 : 0) * 5;
true 當成 1? 你得自己寫出來
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.126.34
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1495905277.A.E49.html
推
05/28 01:15, , 1F
05/28 01:15, 1F
→
05/28 01:15, , 2F
05/28 01:15, 2F
→
05/28 01:15, , 3F
05/28 01:15, 3F
→
05/28 01:16, , 4F
05/28 01:16, 4F
推
05/28 01:16, , 5F
05/28 01:16, 5F
推
05/28 01:16, , 6F
05/28 01:16, 6F
※ 編輯: HuangJC (114.136.126.34), 05/28/2017 01:17:31
→
05/28 01:16, , 7F
05/28 01:16, 7F
推
05/28 01:16, , 8F
05/28 01:16, 8F
我看片片時,會認真看有沒有翻出來,你覺得我認不認真..
※ 編輯: HuangJC (114.136.126.34), 05/28/2017 01:18:37
推
05/28 01:18, , 9F
05/28 01:18, 9F
推
05/28 01:18, , 10F
05/28 01:18, 10F
那不是數學啊,不過我看到三個大於還是小於時,又崩潰了一次...
※ 編輯: HuangJC (114.136.126.34), 05/28/2017 01:20:19
→
05/28 01:19, , 11F
05/28 01:19, 11F
→
05/28 01:20, , 12F
05/28 01:20, 12F
推
05/28 01:22, , 13F
05/28 01:22, 13F
推
05/28 01:22, , 14F
05/28 01:22, 14F
推
05/28 01:23, , 15F
05/28 01:23, 15F
→
05/28 01:24, , 16F
05/28 01:24, 16F
推
05/28 01:26, , 17F
05/28 01:26, 17F
推
05/28 01:28, , 18F
05/28 01:28, 18F
推
05/28 01:32, , 19F
05/28 01:32, 19F
推
05/28 01:33, , 20F
05/28 01:33, 20F
推
05/28 01:35, , 21F
05/28 01:35, 21F
推
05/28 01:36, , 22F
05/28 01:36, 22F
→
05/28 01:36, , 23F
05/28 01:36, 23F
→
05/28 01:37, , 24F
05/28 01:37, 24F
→
05/28 01:38, , 25F
05/28 01:38, 25F
x魚啊,都外翻的~
推
05/28 01:43, , 26F
05/28 01:43, 26F
推
05/28 01:50, , 27F
05/28 01:50, 27F
推
05/28 02:05, , 28F
05/28 02:05, 28F
推
05/28 02:09, , 29F
05/28 02:09, 29F
推
05/28 02:35, , 30F
05/28 02:35, 30F
※ 編輯: HuangJC (114.136.126.34), 05/28/2017 02:52:32
※ 編輯: HuangJC (114.136.126.34), 05/28/2017 02:56:51
推
05/28 03:05, , 31F
05/28 03:05, 31F
→
05/28 04:36, , 32F
05/28 04:36, 32F
推
05/28 07:34, , 33F
05/28 07:34, 33F
你是說,我上一句,開心當汁男那句?:P
推
05/28 07:38, , 34F
05/28 07:38, 34F
※ 編輯: HuangJC (175.180.78.57), 05/28/2017 07:43:20
→
05/28 08:23, , 35F
05/28 08:23, 35F
→
05/28 08:24, , 36F
05/28 08:24, 36F
推
05/28 08:56, , 37F
05/28 08:56, 37F
推
05/28 09:20, , 38F
05/28 09:20, 38F
推
05/28 09:46, , 39F
05/28 09:46, 39F
推
05/28 10:42, , 40F
05/28 10:42, 40F
推
05/28 11:27, , 41F
05/28 11:27, 41F
→
05/28 11:27, , 42F
05/28 11:27, 42F
a = 3 + (b == 2) + (c == 3) * 5;
這式子,在不支援 boolean 值運算的 basic 裡,你要怎麼寫?
a=3;
if ( b == 2 )
a = a + 1;
if ( c == 3 )
a = a + 5;
要拆成這麼多行,你不覺得痛苦嗎?
※ 編輯: HuangJC (175.180.78.57), 05/28/2017 12:52:13
→
05/28 13:35, , 43F
05/28 13:35, 43F
→
05/28 15:58, , 44F
05/28 15:58, 44F
→
05/28 15:58, , 45F
05/28 15:58, 45F
推
05/29 19:18, , 46F
05/29 19:18, 46F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 11 篇):