单一&的含义在if语句中

时间:2015-10-06 03:46:50

标签: c if-statement

今天在阅读一些C代码时遇到了一个奇怪的符号 任何人都可以向我解释这行是做什么的吗?

if ((dwEvent & EV_RXCHAR) && cs.cbInQue) { /* do stuff */}

4 个答案:

答案 0 :(得分:3)

if ((dwEvent & EV_RXCHAR) && cs.cbInQue) { /* do stuff */}

& is Binary And Operator&适用于两个变量的每一位。检查,

如果dwEvent & EV_RXCHAR的结果为non-zero,则检查cs.cbInQue是否为non-zero。 如果两个条件都是真的代码,则执行if。

如果dwEvent & EV_RXCHAR的结果为零,则不检查cs.cbInQue,否则执行else块中的代码。

答案 1 :(得分:2)

它使用dwEvent屏蔽(执行二进制AND操作)EV_RXCHAR,检查结果是否为非零,检查cs.cbInQue是否为非零,如果两者都为真,则执行条件语句中的代码。

这不一定是“怪异”的表示法。许多程序员将其用作快捷方式,而不是指定(x & y) != 0

答案 2 :(得分:1)

这是一个按位操作。你可以在这里阅读它。 link

答案 3 :(得分:0)

它的简短形式,通过检查首先输出这些位(dwEvent& EV_RXCHAR)来检查是否设置了任何位EV_RXCHAR。然后,如果其中任何一个设置它 还会检查是否还设置了cs.cbInQue然后执行这些操作。 例如:

unsigned int x = dwEvent & EV_RXCHAR;
if (x !=0)
    if (cs.cbInQue != 0)
        { /* do stuff */}