2013-09-05 33 views
-1

我不明白,在下面的代碼段使用的運營商&和==:特殊用途符&和==的

Static boolean foo(){ 

    long stat; 
    /* ...code*/ 

    if (!(stat & 1)){ 
    /* code... */ 
    } 

    return (stat == SOME_MACRO); 
} 
  • 是什麼&如果做的比較裏面的?
  • 在 返回裏面做什麼==?

在此先感謝。

+7

與工作不真的不是「特殊用途」。他們做同樣的事情,他們總是這樣做。 – harold

+0

可能有用[按位操作和用法](http://stackoverflow.com/questions/1746613/bitwise-operation-and-usage) –

回答

3

&是一個按位AND,它正在測試是否設置了最低有效位stat

如果stat等於SOME_MACRO的值,則==使函數返回1(意爲「true」)。否則它返回0(意思是「假」)。

+0

很好的答案,謝謝! – user2311962

+0

您不應該依賴布爾值true等於1.根據C標準,任何非零值都會評估爲true。大多數編譯器在布爾表達式上都會生成1,但不能保證。 – brianmearns

+1

任何非零值的計算結果爲真,但我認爲真的總是計算爲1 http://stackoverflow.com/questions/2725044/can-i-assume-booltrue-int1-for-any-c-compiler –

1

if (state & 1)是一樣的是if state is odd

return (stat == SOME_MACRO);是相同

if (state == SOME_MACRO) 
    return true; 
else 
    return false; 

說明:任何奇數的二進制表示將在其最後一位數字有1。例如,

3 = 11 
5 = 101 
7 = 111 

如果你已經知道什麼&做,你會發現,當你執行n & 1,所有位除了最後一個被設爲零,最後位保持不變。因此n & 1返回n的最後一位,如果n爲奇數,則爲1,如果n爲偶數,則0爲偶數。

並且(state == SOME_MACRO)將評估爲true如果表達式爲真,並且如果表達式爲False則評估爲false。因此,它將返回truefalse,具體取決於state是否等於SOME_MACRO

1

&(按位與)運算符將其第一個操作數的每個位與第二個操作數的相應位進行比較。如果兩個位均爲1時,結果的對應位設置爲1。否則,它會設置相應的結果位爲0

函數將返回true,如果統計等於SOME_MACRO,否則爲false