在C if语句标准中使用符号

在C if语句标准中使用符号,c,pointers,C,Pointers,我是C新手,正在尝试理解NREL中的一些代码,以便在R中编写类似的函数。下面是代码中我似乎无法理解的部分: long S_solpos (struct posdata *pdat) { if ( pdat->function & L_DOY ) doy2dom( pdat ); } 特别是,评估标准要求: if ( pdat->function & L_DOY ) 我知道pdat是指向posdata结构的指针,从头文件我知道“function”

我是C新手,正在尝试理解NREL中的一些代码,以便在R中编写类似的函数。下面是代码中我似乎无法理解的部分:

long S_solpos (struct posdata *pdat)
{

if ( pdat->function & L_DOY )
    doy2dom( pdat );     
}
特别是,评估标准要求:

if ( pdat->function & L_DOY )
我知道pdat是指向posdata结构的指针,从头文件我知道“function”是posdata结构中的一个变量,它包含各种整数代码:

struct posdata
{
int   function;
L_DOY可以是这样一个函数:

/*Define the function codes*/
#define L_DOY    0x0001
#define L_GEOM   0x0002
#define L_ZENETR 0x0004
我假设if语句正在检查pdat中的函数变量是否对应于L_DOY的代码。然而,我对C还是很陌生,在这样的if语句中找不到任何使用符号的例子或解释


提前感谢您的帮助。

这意味着。它测试的值是一组位标志,可以设置一个或多个位标志。它正在检查是否专门设置了
L_DOY
标志,因为按位和保留两个操作数中出现的位,因此0b0101和0b0011将生成0b0001(两个操作数中唯一设置的位)。由于
L_DOY
只是一个位,即低位,因此它会检查该位是否已在
函数中设置
;它不在乎是否设置了其他位。

单个与是布尔代数中的按位AND运算符,通常用作位掩码。如果您不熟悉这些概念,请参阅google或wikipedia来解释它们。可能是重复的,谢谢!现在这是有道理的。