private static int[] data;
private static bool GetBit(int pos)
if (pos < 32) return ((data[arrayOffset] >> innerOffset) & 0x01) == 0x01;
arrayOffset = (int) Math.Floor(pos / 32.0f);
innerOffset = pos - (arrayOffset * 32);
return ((data[arrayOffset] >> innerOffset) & 0x01) == 0x01;
private static void SetBit(int pos, bool value)
arrayOffset = (int) Math.Floor(pos / 32.0f);
innerOffset = pos - (arrayOffset * 32);
data[arrayOffset] |= (0x01 << innerOffset);
data[arrayOffset] &= ~(0x01 << innerOffset);
private static byte GetByte(int pos)
for (int i = 0; i < 7; i++)
value |= (GetBit(pos + i) ? 1 : 0) << i;
private static void SetByte(int pos, byte val)
for (int i = 0; i < 7; i++)
SetBit(pos + i, ((val >> i) & 0x01) == 1);
public static void Main()
Console.WriteLine("Hello World");
data = new int[] {0, 0, 0};
Console.WriteLine(GetByte(2));