Java 运算符之 & | ~ ^

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中这几个运算符还有很多妙用,比如说处理图片等,我们先简单介绍到这里。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值