2016-01-24 124 views

回答

8

是的,兩種說法都不同任何區別。 !n/10相當於(!n)/10n/10 == 0相當於!(n/10)
運營商!優先於/運營商的優先級,因此n將首先綁定到!!n/10

正如@Kerrek SB在他的評論中指出,!n將評估要麼01所以,表達永遠是false

+1

算術轉換後''(!n)'是0或1,所以表達式總是爲false。 –

0

你在問這個,因爲也許你不清楚如果聲明是如何工作的。所以,讓我先解釋一下。 如果語句的語法是 如果(表達式) {過程遵循}

這裏表達中使用應該是邏輯一,它應導致真或假。只要表達式導致爲真,就會執行if語句,反之亦然。 另一個概念是,如果表達式將導致0(false),那麼if語句將不會被執行。 現在當你使用if(n/10)時,對於n = 123,n/10將導致12(語句使用整數,因此結果)。由於它不是0,它被視爲一個真實的,if語句將執行並且n將根據您的代碼返回。現在n/10不會改變n,因此n(= 123)將被返回並打印。 現在我們來看看if(n/10 == 0)。當n = 123時,n/10第一次將是12,這不等於0.所以,這裏產生一個錯誤,if語句不會像前一個那樣執行。 根據你想要的邏輯,你應該使用if(n/10 == 0)。

+0

謝謝你,我明白了 –

3

此語句

if (!n/10) 
    return; 

相當於

if ((!n)/10) 
    return; 

按照operatpr的描述(6.5.3.3目算術運算符)

5邏輯的結果否定操作符!如果 的操作數不等於0,則其值爲0,如果其操作數 的值等於0,則值爲1.結果的類型爲int。表達式E是等於(0 == E)的 。

因此,如果n等於0,那麼表達(!n)/10等於表達1/10並且隨着兩個操作數都是整數,則結果等於0

如果n不等於0,那麼表達(!n)/10等於到0/10,其結果再次等於0。

所以原始表達式相當於

if (0) return; 

這意味着return語句將永遠不會被執行。

至於第二條語句

if (n/10 == 0) 
    return; 

當n小於10,則導致的n/10(其中,n爲整數)將等於0,你會得到

if (0 == 0) return; 

所以當n小於10時,第二個if語句中的return語句將被執行。

相關問題