你可能熟悉enum
位掩码方案,例如:
enum Flags {
FLAG1 = 0x1,
FLAG2 = 0x2,
FLAG3 = 0x4,
FLAG4 = 0x8,
NO_FLAGS = 0,
ALL_FLAGS = FLAG1 | FLAG2 | FLAG3 | FLAG4
};
f(FLAG2 | FLAG4);
我看到很多这样的代码,会测试掩码中的某个特定位,比如:
if ((mask & FLAG3) == FLAG3)
但这不是等价于这个吗?
if (mask & FLAG3)
使用第一种方式有什么原因吗?我认为第二种更短的版本更容易阅读。
也许是C程序员的习惯,他们认为真值应转换为1
? (不过即使在这种情况下,在赋值或return
语句中使用较长的版本比在条件语句测试中更有意义。)
==
的优先级高于&
,因此您需要在条件中使用括号:if ((mask & FLAG3) == FLAG3)
。 - casablanca