运算符、流程控制语句
自增自减容易出错的地方:
扩展的赋值运算符
a+=b 等同于 a = a+b;
扩展的赋值运算符 隐含了一个类型的强制转换
& && 有何区别
& : 当左边的表达式结果为false时 , 仍旧判断执行右边的表达式
&& :当左边的表达式结果为false时 , 不去判断执行右边的表达式
| || 有何不同之处
| : 当 左边的表达式结果为 true 时 , 仍然会对右边的表达式进行 执行判断
||: 当 左边的表达式结果为 true 时 , 不会会对右边的表达式进行 执行判断
三目运算符:
位运算符
只能操作整型
使用位运算符时 会把 byte char short 先自动提升到 int
<< 左移
x << y 等价于 x * 2^y
>> 右移
x >> y 等价于 x / 2^y
例如
5 >> 1 == 5 / 2^1
0 0000101 5
0 0000010 右移一位 前面补的是符号位 -> 2
0 0000001 右移二位 前面补的是符号位 -> 1
负数右移
1 0000101 -5 补码
1 0000100 反码
1 1111011 原码
1 1111101 原码右移一位 补符号位
反码1 0000010
补码1 0000011 == -3
1 1111110 原码右移二位 补符号位
反码1 0000001
补码1 0000010 == -2
>>> 无符号右移
之前的 >> , 正数负数补的是符号位 , 无符号右移补 0
>>> >> 如果操作的正数 , 那么完全一样 , 操作的负数 差距很大
-5 >>> 1 == 2147483645
1 24个0 0000101 -5补码
1 24个0 0000100 -5反码
1 24个1 1111011 -5原码
0 24个1 1111101 右移一位 补0
得出结果 2147483645