Java 运算符实际运用
1、算术运算符
自增运算符++
单独使用
++a、a++无区别,如:num++ 和 ++num 结果一样
混合使用
++a:变量先+1,再做赋值运算 【先加再赋值】
a++:先做赋值运算,再让变量+1 【先赋值后加】
举例
拓展
num4++ 输出的结果是 100; 看下println 源码:
说明:
println(int x) : x = num4++; // 其实是隐式的赋值运算;
num4++先赋值给 println(int x); 然后变量 num4再+1;
2、位运算符
& 和 && 的区别
按位与 &: 左右两边都要执行 (不论第一个表达式结果是什么,第二个表达式一定会执行)
短路且 &&:当左边表达式为false时,右边表达式不执行,结果为false
^ 异或
同值取0,异值取1。
简单理解就是不进位加法,如1+1=0,,0+0=0,1+0=1
性质
交换律
结合律(即(a^b)^c == a^(b^c))
自反性 A ^ B ^ B = A ^ 0 = A
举例
拓展
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
题解:
说明
比如1,2,3,2,3 , 根据交换规则,则等于 (2^2)^(3^3)^1 ,根据同假异真就是0^0^1 ,最后会得到1 。
面试题的变形:
一个数组存放若干整数,一个数出现奇数次,其余数均出现偶数次,找出这个出现奇数次的数?
位移
左移(<<)规则 : 低位始终补0
右移(>>)规则: 正数符号位补0,负数符号位补1(符号位为最高位,0-正数,1-负数)
无符号右移(>>>)规则:符号位(最高位)始终补0
应用一
HashMap源码中计算hashMap容量的阈值的时候,就使用到了位移运算符
源码
应用二
在向下游定时发送数据时候, 可使用位移来计算数据的发送时间; 从而避免频繁调用下游程序
示例
版权声明: 本文为 InfoQ 作者【凌轩】的原创文章。
原文链接:【http://xie.infoq.cn/article/33d6a59aaddb15b0b3bba3088】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论