根据我之前关于如何比较组合位是否包含特定位的问题,我遇到了这个错误。
int flag1 = 1 << 0;
int flag4 = 1 << 5;
int combined = flag1 | flag4;
if (combined & flag1 == flag1) // <-- Operator & cannot be applied to int, boolean
如果我将标志转换为字节,则错误会将int
替换为byte
。
答案 0 :(得分:12)
编译器在&
语句中看到二进制运算符if
,将其视为逻辑AND(因为它需要一个返回boolean
的表达式),并检查其类型参数。
遇到一个int
参数 - combined
- 和一个boolean
参数 - flag1 == flag1
。由于它需要两个boolean
个参数(&
运算符无法应用于int
和boolean
),因此会出错。
添加括号以便按所需顺序评估运算符:
if ((combined & flag1 ) == flag1)