运营商“&”不能应用于byte,int,boolean

时间:2016-03-21 08:04:15

标签: java bit bit-shift

根据我之前关于如何比较组合位是否包含特定位的问题,我遇到了这个错误。

    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

1 个答案:

答案 0 :(得分:12)

编译器在&语句中看到二进制运算符if,将其视为逻辑AND(因为它需要一个返回boolean的表达式),并检查其类型参数。

遇到一个int参数 - combined - 和一个boolean参数 - flag1 == flag1。由于它需要两个boolean个参数(&运算符无法应用于intboolean),因此会出错。

添加括号以便按所需顺序评估运算符:

if ((combined & flag1 ) == flag1)