位运算 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