错误解决 | java报错 “error: bad operand types for binary operator” & 位运算符优先级

int restmp = 0;
int mask = 1;
while(restmp & mask == 0)//错误

报错:bad operand types for binary operator ‘&’
原因:其实是运算符的优先级问题,对位运算符来说,恒等运算符优先级比位运算符更大,这样写相等于 restmp & (mask == 0),&左边为int型,&右边为boolean型,所以出错。
解决:在前面加括号就行了,让等式变为先&位运算,后恒等判断:(restmp & mask)== 0

while((restmp & mask) == 0)//✔

扩展:位运算符优先级

优先级(从高到低排列) 描述 运算符
1 括号 ()、[]
2 正负号 +、-
3 自增、自减 ++、-- 、!
4 乘除、取余 *、/、%
5 加减 +、-
6 移位运算 <<、>>、>>>
7 大小关系 >、>=、<、<=
8 相等关系 ==
9 按位与 &
10 按位异或 ^
11 按位或 I
12 逻辑与 &&
13 逻辑或 II
14 条件运算 ?:
15 赋值运算 =、+=、-=、*=、/=、%=
16 位赋值运算 &=、I=、<<=、>>=、>>>=

注意:虽然赋值运算“=”优先级低,但是判断相等关系的恒等运算符“==”优先级高。

参考:
[1] 踩坑记录 关于java中的“error: bad operand types for binary operator ”
[2] 位运算符优先级

你可能感兴趣的:(踩坑记录)