2012-08-13 235 views

回答

7

這是按位「與」操作採取的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認爲可以解釋爲trueb認爲可以被解釋爲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 
} 

您的代碼上面走的是按位和兩個值,然後解釋,隨着truefalse。我不知道SDL中使用的確切值,但假設SDL_BUTTON(1)的值爲4SDL_BUTTON(2)的值爲8SDL_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

+0

這是一個很好的答案。我仍然無法理解,但僅僅是因爲這是一個難以理解的概念。謝謝! – Alidaco 2012-08-13 16:23:02

+0

改進的答案很棒!我現在完全理解一切! – Alidaco 2012-08-13 17:31:46