位运算的权限应用


package cn.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
* yicha
* Sep 5, 2008
*/

public class BitOperator {

public String[] getData(){
// String[] result={"1","5","7","12","16","19","30"};
// String[] result=new String[10];
// for(int i=1;i<10;i+=2){
// result[i]=String.valueOf(1*2*i);
// }
String[] result={"1","2","4","8","10","20","40","80","160","320","640","1280","2560","5120"};
// String[] result={"1","2","4","8","10","20","40","80","160"};
return result;
}

/**
* 根据具体的值解析到权限值,比如:具体的权限到一个权限值
* 存储这个值
* @param arg
* @return
*/
public Long doBitOp(String[] arg){
long result = 0;
for (int i = 0; i < arg.length; i++) {
result |= Long.parseLong(arg[i], 16);
}
return new Long(result);
}

/**
* 解析具体的值到对应的值,比如:权限值解析到具体的权限 15解析为(1,2,4,8)
* @param arg
* @return
*/
public String[] phaseBitOp(long arg){
List list=new ArrayList();
int number=1;
for(int i=0;i<16;i++){
long temp=number<<i;//左移i位,数变大,2的i次方
if((temp&arg)>0){
list.add(Long.toHexString(temp));
}
}
String[] result=new String[list.size()];
for(int i=0;i<list.size();i++){
result[i]=list.get(i).toString();
}
return result;
}

/**
* 二分查找法,没有找到则返回-1,否则返回查找到的位置,从0开始
* @param a
* @param target
* @return
*/
public int binarySearch(int a[],int target){
int low=0;
int high=a.length-1;
while(low<=high){
int mid=(low+high)>>>1;//无符号右移一位,即相当于绝对值除2
int midValue=a[mid];
if(midValue<target){
low=mid+1;
}else if(midValue>target){
high=mid-1;
}else{
return mid;
}
}
return -1;
}

/**
* 随机产生数组,数组长度不大于maxArraySize+1,数据不大于maxValue
* @param maxArraySize
* @param maxValue
* @return
*/
public int[] generateRandomSortedArray(int maxArraySize, int maxValue) {
Random rand=new Random();
int arraySize = 1 + rand.nextInt(maxArraySize); //至少保证有1个数据
int[] randomArray = new int[arraySize];
for (int i = 0; i < arraySize; i++) {
randomArray[i] = rand.nextInt(maxValue);
}
Arrays.sort(randomArray);
return randomArray;
}
/**
* @param args
*/
public static void main(String[] args) {
BitOperator bit=new BitOperator();
int a[]=bit.generateRandomSortedArray(10, 50);
for(int i=0;i<a.length;i++){
System.out.println(""+a[i]);
}

System.out.println("二分法查找结果:"+bit.binarySearch(a, 15));
// BitOperator bit=new BitOperator();
// Long result=bit.doBitOp(bit.getData());
// System.out.println(result);
// long temp=15;
// String[] phaseBitStr=bit.phaseBitOp(temp);
// for(int i=0;i<phaseBitStr.length;i++){
// System.out.print(phaseBitStr[i]+",");
// }


}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值