Java 运算符之 & | ~ ^
来源:互联网 发布:非农数据哪个网站 编辑:程序博客网 时间:2024/05/21 19:36
Java运算符有很多,我们在之前的文章中也有介绍,并且着重的介绍了一些它们的特性,今天我们来详细的关注一下 & | ~ ^ 这四个运算符。
1. &:按位的与,当上下都为1的时候才为1,这里我们举个简单地例子:6&2
我们将6换算成2进制是110,将2换算成2进制是010,那么
110
& 010
010
结果是010也就是2.在某些情况下它是可以取代%运算的,当我们用一个数去%2的n次方的时候,就相当于我们用这个数&2的n次方减1.
2. |: 按位的或,当上下不一样的时候,才写1
3. ~:按位的取反,0变1,1变0
4. ^:按位的异或,当上下不一样的时候才写1,可以用来不借助第三块空间交换两个数值的值
int x = 33;int y = 99;x = x ^ y;y = x ^ y;x = x ^ y;
5. 上面我们简单介绍了一下,接下来我们将详细介绍一下他们在java中的使用
在Java JDK1.6的HashMap中,对于Map的DEFAULT_INITIAL_CAPACITY属性有这么一句话MUST be a power of two.也就是说map要求使用者
在初始化的时候,capacity必须是2的n次方,原因很简单,我们很容易使用 hashCode & (length-1)这一特性,高效的求出分组组数。
6. Java当中对于修饰符,其实就是通过&来进行验证的,我们可以去看一下源码,java.lang.reflect.Modifier,下面是我们给出的例子
import java.lang.reflect.*;import java.lang.*;public class Test4modifier{public static int a = 1;final int b = 2;public final int c = 3;public static void main(String[] args)throws Exception{Class myTest = Test4modifier.class;Field[] fields = myTest.getDeclaredFields();Method[] methods = myTest.getDeclaredMethods();for(Field field:fields){System.out.println("name:"+field.getName()+"===修饰符代表的数字:"+field.getModifiers());System.out.println("name:"+field.getName()+"===修饰符:"+Modifier.toString(field.getModifiers()));}for(Method method:methods){System.out.println("方法名字"+method.getName()+"===方法修饰符代表的数字:"+method.getModifiers());System.out.println("方法名字:"+method.getName()+"===方法修饰符:"+Modifier.toString(method.getModifiers()));}}}
7. 我们也可以通过这几个运算符来模拟一下Unix的权限
public class Test4Operator{private static int x =1;//执行private static int w = 2;//写private static int r = 4;//读public static void main(String[] args){int power = 1;//假设一个人只有执行的权限power = addJurisdiction(power,2);System.out.println(checkJurisdiction(power,x));power = deleteJurisdiction(power,x);System.out.println(checkJurisdiction(power,x));} //增加权限的方法public static int addJurisdiction(int owner,int added){return owner | added;}
//删除权限的方法public static int deleteJurisdiction(int owner,int added){return owner & (~added);} //验证权限的方法 public static Boolean checkJurisdiction(int woner,int juri){return (woner & juri) == 0?false:true;}}8. 其实在Java中这几个运算符还有很多妙用,比如说处理图片等,我们先简单介绍到这里。
0 0
- java之运算符
- Java之运算符
- Java运算符之&、|、&&、||、!
- Java 运算符之 & | ~ ^
- java之运算符
- java运算符之++、--
- java之运算符
- Java之运算符
- JAVA运算符之 ++
- Java运算符之算术运算符
- Java运算符之算术运算符
- java之复合运算符
- java初学之运算符
- java 之 移位运算符
- java基础之运算符
- java之位运算符
- java笔记之运算符
- java学习之运算符
- NYOJ 会场安排问题
- 二月的最后一天-吃完火锅回来
- 我的几篇博客(补充简历专用)
- win10系统取消打开应用提示
- Activity/View/Window/Layout 之间的关系分析
- Java 运算符之 & | ~ ^
- Java生成RSA非对称型加密的公钥和私钥
- JDBC基础知识总结
- 名词解释及知识点
- Reactive Programming with RxJava-Chapter4:Applying Reactive Programming to Existing Application(1)
- java命令行构建(三)
- 新手写html时常犯的错误
- 关于IIC与MPU6050
- spring源码学习--AbstractXmlApplicationContext(三)