首先把 Java操作符的优先级和结合性 贴在这,
| 优先级 | 结合性 |
1 | [ ] . ( ) (函数呼叫) | 从左到右 |
2 | ! ~ ++ -- +(单操作数) –(单操作数) ( ) (类型转化) new | 从右到左 |
3 | * / % | 从左到右 |
4 | + - | 从左到右 |
5 | << >> >>> | 从左到右 |
6 | < <= > >= instanceof | 从左到右 |
7 | == != | 从左到右 |
8 | & | 从左到右 |
9 | ^ | 从左到右 |
10 | | | 从左到右 |
11 | && | 从左到右 |
12 | || | 从左到右 |
13 | ? : | 从右到左 |
14 | = += -= *= /= %= ^= <<= >>= >>>= | 从右到左 |
然后看下边题目:
可以得出很多种答案的,那时候我一连做了几次都没有得出最终的正确答案,你可以试试看
然后,我们解析一下,要知道的 ++优先级是2 右结合, * / %是一个级别上的, 优先级是3 左结合的, 还要知道 ++(后自增)是先运算后增加的,前自增是先增加后运算的,好的,那么我们的答案就应该是6, 首先 计算a++ 此时a的值仍为8,然后计算 ++b 此时b的值为5,再计算 8%5 结果3,最后3*2=6,下边再引用a的话 a的值就为9了,因为运算完了要增加的嘛, b的值为5,
这个题目容易,知道 + 的优先级比 <<的优先级高(呵呵 有点不可思议吧 但是事实如此),就知道答案 32。
接下来的这个:
在这里要 说明一个int转byte的小规律:
int a----->byte b (b = (byte)a);
a为正数:b = a - 256 ,如果b > 127 继续b = b - 256,直至 范围落在 -128 --127,
a为负数:b = a + 256 ,如果b < -128 继续b = b + 256,直至 范围落在 -128 -- 127。
还要知道 byte short char 作为操作数参与运算时候 系统都会先把他们转成int数值来参与运算。
(byte)255 为 -1, -1 转为int 1111 1111 1111 1111 ,和 0xff(0000 0000 1111 1111)相与,结果 -1 + 256 = 255。