Section1
位运算 and 在java中用&表示
其单个运算包括四种
System.out.println("1&1:"+(1&1)); System.out.println("1&0:"+(1&0)); System.out.println("0&1:"+(0&1)); System.out.println("0&0:"+(0&0));
1&1:1
1&0:0
0&1:0
0&0:0
可以看到,在单个位上,1&任意数等于被&数本身
而0&任意数等于0
Section2
这种特性可以运用在取位操作上
比如给任意一个数字11,我想知道它二进制的最后一位是多少
System.out.println("11&1:"+(11&1));11&1:1
那么,这种特性有什么用,可以怎么用?
至少有两种用法
用法一:判断奇数偶数
public static void main(String args[]){ getEvenNumber1(0,10); getEvenNumber2(0,10); } public static void getEvenNumber1(int from ,int to){ List<Integer> mList = new ArrayList<Integer>(); for (int i = 0;i<to;i++){ if (i%2==0){ mList.add(i); } } System.out.println("方法一:"+mList.toString()); } public static void getEvenNumber2(int from ,int to){ List<Integer> mList = new ArrayList<Integer>(); for (int i = 0;i<to;i++){ if ((i&1)==0){ mList.add(i); } } long endTime = System.currentTimeMillis(); System.out.println("方法二:"+mList.toString()); }
方法一:[0, 2, 4, 6, 8] 方法二:[0, 2, 4, 6, 8]
可以看到,这个和使用%的效果是一样的
用法二:一个int存两个数值,节省内存
比如,你可以把int值32位的前面一部分存一部分数据,后面一部分再存一部分数据,
然后再通过&操作取出来,这样,就不需要两个变量了,可以节省内存。