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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 家乐卡到期本金还一半怎么办 新三板公司没有资不抵债没钱怎么办 户户通智能卡坏了怎么办 秦岭云无法回看怎么办 身份证在火车站丢了怎么办 到火车站发现身份证丢了怎么办 广电宽带太慢了怎么办 车有后雷达想装前置雷达怎么办 现代朗动油耗大怎么办 雷达线雕头里有水怎么办 上古卷轴5免疫死亡奴役怎么办 dw手表时针不动了怎么办 雷达陶瓷表壳摔坏了怎么办 雷达表盘摔坏了怎么办 雷达测速60超了怎么办 卡西欧手表电池没电了怎么办 审稿人让引用他的文章怎么办 考二建未从事该行业满两年怎么办 2档换3档离合器怎么办 高铁车票丢了怎么办 事业编制调动原单位不同意怎么办 想去铁路上工作怎么办 房产权50年以后怎么办 在香港手机没电怎么办 学校官网登陆忘记密码怎么办 网上申报学校忘记密码怎么办 专转本想换专业怎么办 发生工伤没有平均公资怎么办? 单招过了不想去怎么办 22岁了还想复读怎么办 父母不让我读大专了怎么办 专升本考试失利怎么办 高考复读一年后失败了怎么办? 医保住院超过30万怎么办 北京医保超过2万怎么办 工伤公司垫付医疗费没法报销怎么办 司法考试照片耳朵露不出来怎么办 新华社毕业证照片用光了怎么办 农村父母投靠落户社保怎么办 退休后投靠父母户口怎么办 要离婚想儿子了怎么办