gpt4 book ai didi

c++ - if (mask & VALUE) 还是 if ((mask & VALUE) == VALUE)?

转载 作者:IT老高 更新时间:2023-10-28 12:32:50 28 4
gpt4 key购买 nike

您可能熟悉 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) 测试 FLAG3 中的 所有 位是否存在于 mask 中; if (mask & FLAG3) 测试 any 是否存在。

如果您知道 FLAG3 恰好设置了 1 个位,它们是等价的,但如果您可能定义复合条件,那么养成显式测试所有位的习惯会更清楚,如果这就是您的意思。

关于c++ - if (mask & VALUE) 还是 if ((mask & VALUE) == VALUE)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4649231/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com