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]+",");
// }
}
}
分享到:
相关推荐
在权限加解密的场景中,位运算能够高效地实现权限的设置、检查和组合,尤其适用于多权限系统。下面我们将深入探讨如何利用位运算来实现权限管理。 首先,我们需要了解JavaScript中的基本位运算符: 1. **与运算符...
本文将深入探讨“基于位运算的权限细粒度控制”这一主题,结合给定的标签“源码”和“工具”,我们将探讨如何通过位运算实现高效、灵活的权限管理。 位运算是一种在计算机科学中处理二进制数据的基本操作,包括按位...
在权限设计中,位运算特别有用,因为它可以简洁快速地判断和设置权限状态。在进行位运算时,常见的操作包括“或(|)”、“与(&)”、“非(~)”、“异或(^)”、“左移()”和“右移(>>)”运算符。 在权限系统中定义权...
本文将深入探讨C#枚举中的位运算,包括其基本概念、操作方法以及如何应用于权限管理。 首先,要理解位运算,它是计算机底层处理数据的基本方式,涉及到对二进制位的操作。常见的位运算有与(&)、或(|)、非(~)...
1. 位掩码:通过位运算和位掩码,我们可以快速地检查、设置或清除特定的位,例如在权限控制、状态标志等场景。 2. 数据压缩:位运算可以用于高效地存储和处理数据,特别是在需要节省存储空间的情况下。 3. 位操作...
- 位掩码操作:通过位运算快速检查或设置特定位,常用于权限控制和状态标记。 - 编码解码:在编码算法中,位运算可以高效地进行数据转换。 总结,易语言中的位运算提供了强大的底层操作能力,通过巧妙运用位运算,...
位运算广泛应用于各种场景,比如在操作系统中进行权限检查,或者在图像处理中对像素进行操作。另外,位运算在某些算法中能够提高计算效率,比如快速求幂、对数据进行压缩和解压缩等。例如,通过位运算可以快速判断一...
在实际应用中,这种技术可以扩展到更复杂的权限体系,比如通过位掩码(bitmask)来表示更丰富的权限结构,或者与其他标识结合,实现更复杂的访问控制逻辑。同时,这样的设计也方便了权限的动态调整和权限集的比较。
在用户权限管理中,位运算被广泛应用于权限的设置与检查。通过位运算符,每个权限都可以对应到一个特定的二进制位,从而通过简单的位运算即可快速判断某个权限是否被赋予给特定用户。 举个例子,我们可以定义一些...
- 在处理文件权限时,比如Unix系统中的文件权限,我们可以用位运算来设置读、写、执行等权限。 - 在网络编程中,IP地址和端口号的处理经常用到位运算。 - 在内存管理中,位图常用于表示和操作大量资源的状态,如...
4. **状态管理**:通过位运算可以轻松管理多个标志位的状态,比如权限控制、功能开关等。 综上所述,位运算在计算机科学中扮演着重要的角色,特别是在那些对性能要求极高的场景中。理解并掌握位运算的基本原理及...
位运算在权限管理中的应用不仅简化了代码,还提高了性能,因为位运算在计算机底层是直接在二进制级别进行的,速度非常快。 总结一下,C#枚举结合位运算提供了强大而灵活的权限管理机制。通过`[Flags]`特性,我们...
可以使用位AND运算来检查特定权限是否存在:`If (权限码 AND (1 )) = 0 Then`,这里的`(1 )`是左移运算,相当于将1移动n位,用于设置或检查特定位置的位。 幂运算在权限系统中也起着关键作用。在VB中,`^`符号用于...
在Python编程语言中,位运算符是用于对整数类型(如int)的二进制表示进行操作的特殊运算符。...通过不断练习和应用位运算,你能够更好地理解计算机内部的工作原理,并在解决问题时拥有更多的工具和技巧。
在实际应用中,每次用户尝试执行操作时,将用户的权限总值与所需操作的权限进行位与运算。如果结果非零,说明用户具有该权限,允许执行;如果结果为零,则表示用户无权执行,可以根据需求返回错误信息或者采取其他...
1. 字节(Byte):运算机存储器中的基本单位,一个字节由8位(bit)二进制位组成。 2. 文件属性:在Windows操作系统中,文件有四种属性,包括存档、只读、系统和隐藏。用户创建的文件通常具有存档属性。 3. ...
这种方法可能涉及将权限模型转化为二进制位,例如,一个特定的权限可以对应一位,通过位运算来快速判断用户是否有某项权限。这种技术通常被称为位掩码(Bitmask)或位字段(Bitfield)技术。位掩码允许我们用一个...
在IT行业中,尤其是在开发具有复杂用户管理系统的应用时,交叉会员权限管理是一个常见的挑战。...总的来说,二进制与位运算在权限管理中提供了强大而灵活的解决方案,值得在实际项目中考虑和应用。
4. **位操作在Android中的应用**:在Android系统中,位操作可以用于高效地管理资源标识符、颜色值、权限标志等。例如,通过位掩码和位操作,我们可以方便地设置和检查多个标志,这在处理多状态的系统资源时非常有用...
在IT行业中,数据库查询效率是优化系统性能的关键因素之一。在处理多选查询时,传统的...同时,这种技术在权限管理、状态过滤等场景中也有广泛的应用。了解并熟练运用位运算,不仅能优化代码,还能提升系统整体的性能。