基础:
int length = 4;
定义长度为4(2^n),那么任何一个数如何使4的整数倍:则可以得出如下结论:
int b = 1....100;
即转换成2进制后最后两(n)位必定为0;
length-1=01111....1;
那么b&(length-1)即b的最低n位,也就是余数
假如有这么一种需求:
发表博客添加标签,根据标签id设置标签显示不同颜色!
设计思路如下:
-
先定义颜色数组:
String []colorArray={"blue","red","black","pink"};
-
获取标签id
int id=100;
-
获取数组长度
int size = colorArray.length;
-
获取颜色:
-
第一种方法:
String color = colorArray[id%size];
-
第二种方法
String color = colorArray[id&(size-1)];
-
以上两种方法都可以取出所对应颜色
-
第一种方法是传统取余
-
第二种方法是采用交集方式,位运算,变相取余,效率高,结果等同于求余
-
第二种方式是在hashmap源码时看到的:获取数组索引
static int indexFor(int h, int length) {
// assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
return h & (length-1);
}
本文介绍了位运算的基础概念及其实用场景,通过具体的例子展示了如何利用位运算提高程序效率,比如快速计算数组中特定元素的颜色。此外还对比了位运算与传统取余操作的区别及其在实际开发中的应用。


1952

被折叠的 条评论
为什么被折叠?



