位运算 Bit操作_set&get (Java)

位运算 Bit操作_set&get (Java)

原理:利用Byte类型进行位运算实现操作Bit

         基本知识: 1Byte = 8 bit

Bit枚举enum类

package com.lius.Bits;

/**
 * bit 值枚举类
 * @author Administrator
 *
 */
public enum bit{
	Zero(0),One(1);
	private int value;
	private bit(int value) {
		this.value = value;
		byte a = -128;

	}
	
}

Bit操作Common接口

package com.lius.Bits;

public interface BitCommon {

	/**
	 * init Bit
	 */
	public void init();
	/**
	 * set Bit Value
	 */
	public boolean set(long value);
	/**
	 * get Bit Value
	 */
	public bit get(long index);


}

Bit操作实现类

package com.lius.Bits;

public class BitArray implements BitCommon {
	
	private byte[] bitArrays;
	
	@Override
	public void init() {
		// TODO Auto-generated method stub
		bitArrays = (bitArrays==null?new byte[1]:bitArrays);
	}

	@Override
	public boolean set(long value) {
		// TODO Auto-generated method stub
		int bLen = (int) (value>>3)+1;
		if(bitArrays==null) {
			bitArrays = new byte[bLen];

		}else if(bitArrays.length<bLen) {
			byte[] bitArraysNew = new byte[bLen];
			for(int i =0;i<bitArrays.length;i++) {
				bitArraysNew[i] = bitArrays[i];
			}
			bitArrays = bitArraysNew;
		}
		value = value&7; //value%8
		int a = 1<<value;
		bitArrays[bLen-1]|= a;
		return true;
	}

	@Override
	public bit get(long index) {
		// TODO Auto-generated method stub
		int position = (int) (index>>3);
		if(bitArrays==null || bitArrays.length<position){
			return null;
		}
		byte b = bitArrays[position];
		int bIndex = (int) (index&7);
		return (b>>(bIndex)&1)==1?bit.One:bit.Zero;
	}

}

测试类

package com.lius.Bits;

import java.util.Arrays;
import java.util.List;

public class testBit {

private byte[] bitArrays;
    public static void main(String[] args) {
	BitArray ba = new BitArray();
	ba.init();
	ba.set(119);
	ba.set(120);
	ba.set(121);
	System.out.println(ba.get(119).ordinal());
    }

}

打印输出:

1

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值