为什么在这个& 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