爲什麼在這個& if語句宏SDL_BUTTON之前吧?它有什麼作用?幫我理解這段代碼的作用。
if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1))
//code to be executed
爲什麼在這個& if語句宏SDL_BUTTON之前吧?它有什麼作用?幫我理解這段代碼的作用。
if(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1))
//code to be executed
這是按位「與」操作採取的SDL_GetMouseState(NULL, NULL)
結果和「安定」它的SDL_BUTTON(1)
結果。
也就是說,結果是一個整數值,其中在最終結果中,兩個答案中都是1的所有位都是1。
實際上,這是檢查SDL_BUTTON(1)當前是否被按下。他們這樣做而不是==比較,因爲即使與其他鼠標同時按下時按鈕1被按下,它也會評估爲真。
位與澄清
說我有以下幾點:int foo = 25;
我可以在幾個不同的基地查看此。正常的基數是10(十進制);我們通常在日常生活中查看數字的基礎。在基數10中,這個數字是25
。我也可以查看基數2(二進制)中的數字。在二進制中,數字表示爲11001
。該數字可被解釋爲具有幾個「真」(1)位和幾個「假」(0)位。 「真」位全部獲得與其在列中的位置相關的固定值。每列都有一個值2^i,其中i是列的索引。列從右編號到只剩下最右邊的列感數0
Truth value: 1 1 0 0 1
Column value: 16 8 4 2 1
我們採取的是真實,把它們相加得到的值的所有列的列值。在這種情況下,我們將一起添加1,8和16,因爲它們的列是真實的。 1 + 8 + 16 = 25.
我們也可以對二進制數執行其他操作,比如「按位」。在C中,有兩種類型的語句。邏輯和和按位和。的邏輯和的形式如下:
if (a && b) { // two & together is logical-and
// do something
}
語句// do something
執行如果a
認爲可以解釋爲true
和b
認爲可以被解釋爲true
的值的值;對於整數,所有非零數字是true
。如果其中任何一個都是假的,則不執行該陳述。
按位和類似,但在一定程度上運行。它需要兩個值並逐一比較它們以確定輸出值。如果這兩個值都爲真,那麼輸出中的位也是正確的。如果該值在任一值中都爲假,則輸出中的位爲假。
int a = 25; // 011001
int b = 13; // 001101
int c = a & b; // 001001 -- or 1 + 8 == 9
if (c) {
// do something if c is non-zero
}
您的代碼上面走的是按位和兩個值,然後解釋,隨着true
或false
。我不知道SDL中使用的確切值,但假設SDL_BUTTON(1)
的值爲4
和SDL_BUTTON(2)
的值爲8
。 SDL_GetMouseState(NULL, NULL)
將返回一個整數,其中每個位代表一個標誌。如果SDL_GetMouseState(NULL, NULL)
返回4
(鼠標按鈕1向下),則4 & 4
將爲4(0100 & 0100 == 0100
)。如果它返回8
(鼠標按鈕2向下),則8 & 4
將爲0(01000 & 00100 == 00000
;沒有列與1
共同)。如果返回12(鼠標按鈕1和2向下),則12 & 4
將爲4(01100 & 00100 == 00100
)。
如果按下鼠標按鈕1,則&
的結果將不爲零,即true
。如果鼠標按鈕1被按下和鼠標按鈕2被按下,結果是仍然true
。
我認爲這是對這兩個函數調用的返回執行的按位'&'(位掩碼)。 – TheZ 2012-08-13 16:11:55