打标、去标工具。

经常有一个对象都是有一个Int类型的字段,用于给该对象进行打标。  一个int类型是32位,  就说明 这样的一个字段,可以被打上32个标 。 每一个标占1位 。  0表示未被打标,1表示已被打标。


写了一个Util来进行打标与去标操作。如下:

public class FlagBitUtil {
	
	public static final int FULL_FLAG = 0XFFFFFFFF ;
	
	/**
	 * 打标
	 * @param falg 需要打标的源数
	 * @param offset 标位
	 */
	public static int sign(int flag , int offset){
		int offsetT = 1 << ( offset - 1);
		return flag | offsetT ;
	}
	
	/**
	 * 去标
	 * @param falg 需要移除标的源数
	 * @param offset 标位
	 */
	public static int removeSign(int flag , int offset){
		int offsetT = 1 << ( offset - 1);
		offsetT = FULL_FLAG ^ offsetT ;
		return flag & offsetT ;
	}
	
	/**
	 * 检查标位是否被打标
	 * @param flag	
	 * @param offset  标位
	 * @return 该标位是否被打标
	 */
	public static boolean checkSign(int flag , int offset){
		int offsetT = 1 << ( offset - 1);
		return (flag & offsetT) == offsetT ;
	}

}



测试如下:

public class Test {
	
	public static void main(String[] args) {
		
		int flag = 0 ;	//原始标
		
		flag = FlagBitUtil.sign(flag, 3);	//将标的第3位标记 
		
		System.out.println(flag + "\t" + Integer.toBinaryString(flag));
		
		flag = FlagBitUtil.sign(flag, 4);  //将标的第4位标记
		
		System.out.println(flag + "\t" + Integer.toBinaryString(flag));
		
		flag = FlagBitUtil.removeSign(flag, 3) ;  //将标的第3位标记移除
		
		System.out.println(flag + "\t" + Integer.toBinaryString(flag));
		
		//检查第1、2、3、4、5位是否被打标
		System.out.println(FlagBitUtil.checkSign(flag, 1));	
		System.out.println(FlagBitUtil.checkSign(flag, 2));
		System.out.println(FlagBitUtil.checkSign(flag, 3));
		System.out.println(FlagBitUtil.checkSign(flag, 4));
		System.out.println(FlagBitUtil.checkSign(flag, 5));
		
	}

}

输出:
4	100
12	1100
8	1000
false
false
false
true
false


你可能感兴趣的:(打标、去标工具。)