2012-03-23 40 views
3

對不起,這個新手的問​​題,但我不能對谷歌什麼,我需要知道找到。關於用C++回報

我明白回報,但不明白這...這是什麼意思呢?

return (tail+1)%N == head%N; 

非常感謝耐心。

回答

5

它返回truefalse,取決於表達式是否是真還是假。

它一樣:

if ((tail+1)%N == head%N) 
    return true; 
else 
    return false; 
+1

除了它更習慣用法,對知道C++的人更易讀。 – 2012-03-23 09:31:33

+2

IMO需要將括號內的整個表達式(即'return((tail + 1)%N == head%N);'as'in if')更具可讀性。但我只是喜歡多餘的括號,以消除任何歧義。 – Rup 2012-03-23 09:36:27

2

你返回一個布爾值。該值表示是否將除以N(尾+ 1)的其餘部分是相同的頭部。

2

它計算表達式,並返回結果。在這種情況下它是在比較了兩種模運算,其結果要麼是truefalse這將被退回。

2

如果分割爲尾+ 1和頭部的其餘部分是相同的

例如如果尾巴是2,則返回true,頭是1且N爲2

(尾+ 1)%N是1

頭%N是1個太

所以整個表達式返回true

3

(尾+ 1)%N ==頭%N

返回一個布爾值,無論是真或假。該語句意味着加1而與N分頻後得到的跟蹤(軌跡+ 1),其餘的後等於頭N.%劃分的剩餘部分被用於帶餘除法

(%)。模數是給出兩個值的除法的餘數的運算。

檢查此鏈接爲C++運算符:http://www.cplusplus.com/doc/tutorial/operators/

2

答案很簡單:

因爲==操作你的函數會返回一個bool,這意味着它只能是truefalse的。等效會是這樣的:

return 5 == 4; 

這將返回false因爲5不等於4。

龍答:

而是在一行寫這個的,你可以最多把它分成多行代碼。讓我們姑且認爲tailheadN是整數值,那麼你可以把它寫這樣的:

int x, y; 
x = (tail+1)%N; 
y = head%N; 
if (x == y) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

現在,在這個代碼有可能也是%迷惑你一點。 %被稱爲Modulus Operator,可以給你餘下的算術運算。在一個簡單的例子,這將意味着:

10 % 3 = 1因爲10/3是3用的1其餘因此,爲了更清楚,讓我們只是讓你的具體問題,另外一個例子:

讓我們姑且認爲tail=10head=6N=2。然後你會得到這樣的事情:

x = (10+1)%2 
x = 11 % 2 
x = 1 

y = 6 % 2 
y = 0 

y != x 

這將返回false原因xy是不相等的。 (如果您將運行與給定值,例如代碼)

要了解更多有關你可以看看here,或者只是任何其他基本的C++教程Modulus