1.請說明下面這個程式的輸出,並給予解釋:
intfunc(
inti,
intn)
解釋:
因為:i = n,則等價於 0 && printf("%d/n",i)) && !func(i+1,n) || printf("%d/n",i)
由於&&的短路性質,等價於 0 || printf("%d/n",i),即列印 i 的值。
如果i < n,則等價於 1 && printf("%d/n",i)) && !func(i+1,n) || printf("%d/n",i)
所以按順序執行過去,先列印乙個 i ,隨後遞迴 !func(i+1,n),在遞迴裡一樣處理,列印i + 1,進入第二次遞迴;列印i + 1 + 1,進入第三次遞迴。。。
一直到i = n為止,此時列印i,也就是列印n ,然後第一次返回,返回值為1。
在第一次返回的上下文中:i = n - 1, 由於func(i+1,n) 返回值恆等於1,所以!func(i+1,n)恆等於0,原來的總表示式等價於exp1 && exp2 && 0 || printf("%d/n",i),不管exp1和exp2的值為什麼,這裡都會執行最後的列印語句,而這裡的i = n - 1,所以列印n - 1。
然後第二次返回,此時i = n - 2,列印n - 2。
第三次返回,列印 n - 3.
一直到i為最初的i,此時再列印一次i。
(與運算) (或運算) (異或運算)
即 兩個運算元同為 1 的時候為1 0 0 0 1 0 1 0 1 1 1 1 1 即 兩個運算元中至少有乙個為 1 的時候為1 0 0 0 0 1 1 1 0 1 1 1 0 即 兩個運算元不同的時候為1 運算規則 1 0 0 1 即 對乙個二進位制數按位取反,即將0變1,1變0。將乙個運算物件的...
與運算( ) 或運算( ) 異或運算( )
預算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩個同時為1,結果為1,否則為0 例如 3 5 十進位制3轉為二進位制的3 0000 0011 十進位制5轉為二進位制的5 0000 0101 結果 0000 0001 轉為十進位制 1 即 3 5 1 運算規則 0 0 0 0 1 1 ...
與運算( ) 或運算( ) 異或運算( )
一 與運算子 預算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩個同時為1,結果為1,否則為0 例如 3 5 十進位制3轉為二進位制的3 0000 0011 十進位制5轉為二進位制的5 0000 0101 結果 0000 0001 轉為十進位制 1 即 3 5 1 二 或運算 運算規則...