我在哪里可以使用&和==比较常数?有什么不同?

时间:2013-03-25 19:20:20

标签: c windows winapi

我想知道之间的差异:

file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY

和:

file.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY

当我使用第一个时,我会获得更多文件。

FILE_ATTRIBUTE_DIRECTORY是文件属性常量,file.dwFileAttributes是Windows API中的WIN32_FIND_DATA结构成员。

3 个答案:

答案 0 :(得分:3)

规则很简单:

  • 当变量只能包含一个值时,可以使用等于运算符==进行测试。
  • 当变量可以保存零个,一个或多个标志时,您可以使用按位和运算符&来测试是否存在该标志。

对于dwFileAttributes,文档说:

  

文件的文件属性。有关可能的值及其说明,请参阅...

使用复数表示我的第二个要点适用。

答案 1 :(得分:2)

&是按位操作,而==是实际比较。

按位AND

#define FLAG_1 1
#define FLAG_2 2
#define FLAG_3 4
#define FLAG_4 8

/* Check if FLAG_2 or FLAG_3 is enabled in flags */
if ((flags & FLAG_2) || (flags & FLAG_3)) {
    ...
}

关于按位AND和其他基本位操作的大量资源。 Wiki link

定期比较

#define FLAG_1 1
#define FLAG_2 2
#define FLAG_3 4
#define FLAG_4 8

/* Check if flags is *equal* to FLAG_2 value */
if (flags == FLAG_2) {
    ...
}

答案 2 :(得分:1)

file.dwFileAttributes是一个用作标志的整数类型。每个位代表一个标志(0或1表示设置或未设置)

FILE_ATTRIBUTE_DIRECTORY是一个整数,只有一个位设置。 (该位表示文件是否为目录)

如果设置了file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY标志,

FILE_ATTRIBUTE_DIRECTORY将返回非零值。

如果设置的唯一标志是file.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY,则

FILE_ATTRIBUTE_DIRECTORY返回true。