package com.interview.algorithms.general;
/**
* Created_By: zouzhile
* Date: 10/18/14
* Time: 3:34 PM
*/
public class C1_34_BitSet {
private byte[] bits;
private byte[] masks = new byte [] {1, 2, 4, 8, 16, 32, 64, -128};
public C1_34_BitSet(int N){
bits = new byte[N/8 + 1];
}
public void set(int pos) {
int offset = pos / 8;
int bit = pos % 8;
bits[offset] |= masks[bit];
}
public void unset(int pos) {
int offset = pos / 8;
int bit = pos % 8;
bits[offset] &= (~masks[bit]);
}
public void flip(int pos) {
int offset = pos / 8;
int bit = pos % 8;
bits[offset] ^= masks[bit];
}
public int get(int pos) {
int offset = pos / 8;
int bit = pos % 8;
int result = (bits[offset] & masks[bit]) == masks[bit] ? 1 : 0;
return result;
}
public String toBinary() {
String binary = "";
for(int i = 0; i < bits.length; i ++ ){
int val = bits[i];
for(int j = 0; j < 8; j ++) {
binary += val & 1;
val >>>= 1;
}
binary += " ";
}
return binary;
}
public static void main(String[] args) {
C1_34_BitSet bitset = new C1_34_BitSet(20);
bitset.set(10);
System.out.println("set = " + bitset.toBinary());
bitset.unset(10);
System.out.println("unset = " + bitset.toBinary());
bitset.flip(10);
System.out.println("flip = " + bitset.toBinary());
}
}