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] 位运算符优先级