2014-10-20 205 views
-7

這條線會打印什麼?這條線打印什麼,爲什麼?

printf("hello\n") | (printf("goodbye\n") || printf("world\n")); 

測試後,印:

hello 
goodbye 

但我仍然不知道爲什麼,仍然堅持它,任何提示將非常感激!順便說一下,我知道printf()返回字符輸出的數量,但仍然沒有得到邏輯背後的邏輯。既然你已經使用了他們之間|

+8

提示:也許搞清楚'|'和'||'做什麼? – juanchopanza 2014-10-20 09:19:07

+1

您的問題標題似乎與您的問題相沖突。你*知道*它是什麼... – 2014-10-20 09:20:07

+0

我知道|是比特OR還是||是OR運算符,但仍然不知道爲什麼它打印再見,但不是世界:( – 2014-10-20 09:24:09

回答

3
| - Bitwise OR operator 
|| - Logical OR operator 

printf("hello\n") | (printf("goodbye\n") || printf("world\n")); 

在這種情況下,無論是printf("hello\n")printf("goodbye\n")將被執行。由於它是按位操作,兩者都將被執行。 printf也返回打印的字符數。因此在你的情況下,printf("hello\n") | printf("goodbye\n")將導致6 | 8 = 0110 | 1000 = 1110 = 14(十進制)。

因此,該表達式變得相當於14 || printf("world\n")。由於14(即非零)本身滿足邏輯或檢查,就不會繼續printf("world\n")這將是6

+0

謝謝@Kay的編輯。我需要做一些研究如何做到這一點:-) – 2014-10-21 03:14:03

2
(printf("goodbye\n") || printf("world\n")) 

兩個「再見」和「世界」是真實的陳述。因此,它正在採取「再見」作爲第一個按順序執行。

試試這個更多的澄清

printf(printf("hello\n") | (printf(NULL) || printf("world\n"))); 
Output: 
hello 
world 

因爲 「NULL」 是FALSE和 「世界」 是真。 (0 || 1 = 1)

謝謝,