1、赋值运算符
扩展的赋值运算符(+=,-=,*=,/=,%=)的特点: 隐含了自动强制转换。
面试题:
short s = 1;
s = s + 1; //这里会提示损失精度,因为s参与运算会先转成int,然后把int赋值给short就会提醒损失精度
short s = 1;
s += 1; //这里运行通过,因为+=里包含了强制转换,即:s = (short) (s + 1)
2、逻辑运算符:
逻辑与& :有false则false
逻辑或| :有true则true
逻辑异或^ : 相同为false,不同为true
逻辑非! :非false则true,非true则true
(偶数个!不改变本身)
**注:
1> &、|、^、! ,当两边值是逻辑值时,它们是逻辑运算符,当两边是数值时,它们是位运算符。
2> &&和&的区别: &&具有短路功能,即左边为false则右边不运行。
|| 和 | 的区别: ||具有短路功能,即左边为true则右边不运行。**
3、位运算符:
①按位与&:按位取与运算
②按位或 | :按位取或运算
③按位取反~:按位取反,1为0,0为1
④按位异或^:按位取异或运算
注:一个数据对另一个数据连续取异或运算两次,数据不变
即:a ^ b ^ b = a
面试题:实现两个整形数据a=1,b=2,的交换
方式一:引用第三方变量(开发中用)
int c ;
c = a;
a = b ;
b = c ;
方式二:用异或实现(面试用)
//左边:a , b , a
//右边 a ^ b
a = a ^ b ;
b = a ^ b ;
a = a ^ b ;
方式三:变量相加来实现
a=a+b;
b=a-b;
a=a-b;
方式四:一句话搞定
b=( a+b ) - ( a=b ) ;
⑤左移<< :左边最高位补丢弃,右边补齐0 。
3<<2 :往左移2位=左边的数据(3)×2的移动次幂,即3×2^2
⑥右移>>:最高位是0,左边,补齐0;最高位是1,左边补1 。
24>>2:往右移2位=左边的数据(24)/ 2的移动次幂,即24/2^2
⑦无符号右移>>> :无论最高位是0或者1,左边补齐0 。
面试题:请用最有效率的方式计算2×8的结果?
2<<3 (= 2×2^3=2×8)