系统运维
212
本博客来自我的新书《Java系统性能优化》的第四章15节,也欢迎阅读我的的经典书 《Spring Boot 2 精髓 》
4.15 位运算
Java位运算非常高效,可以使用位运算代替部分算数运算以提高性能,比如,最常用的判断奇数
int a = 111; System.out.print((a & 1)==1);
乘以2或者除以2,也可以使用位运算
int a = 111; //右移1位,相当于除以2 System.out.println(a>>1); //左移1位,相当于乘以2 System.out.println(a<<1);
在JAVA8的Integer里,也使用了位运算来实现int转字符串。
//r=i-q*10 优化为如下 r = i - ((q << 3) + (q << 1)); //q=i/10,优化为如下 q = (i * 52429) >>> (16+3);
这里(i * 52429) >>> (16+3) 相当于i*0.1000000003,因此对于i较小的数据,可以认为俩着是相等的。
对比直接使用i/10 和 (i * 52429) >>> (16+3),性能如下
Benchmark Mode Samples Score Score error Units c.i.c.c.BitTest2.bit avgt 5 0.669 0.031 ns/op c.i.c.c.BitTest2.general avgt 5 1.251 0.560 ns/op