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] 位运算符优先级
本文解析了Java中位运算符优先级低于恒等运算符的问题,导致的bad operand types for binary operator错误,并提供了正确的解决方案。通过实例说明如何避免此类错误,确保代码正确运行。
694

被折叠的 条评论
为什么被折叠?



