Java Tutorials - Herong's Tutorial Notes
Dr. Herong Yang, Version 6.00

bitStringTest.java - Testing Program

This section provides tutorial example program to test setBit(), getBit(), and rotateLeft() to manage bit strings in byte arrays.

To test my bit string methods, I wrote the following test program, bitStringTest.java

/**
 * BitStringTest.java
 * Copyright (c) 2006 by Dr. Herong Yang, http://www.herongyang.com/
 */
public class BitStringTest {
   public static void main(String[] arg) {
      byte[] inString = new byte[5]; 
      inString[0] = (byte) 0x00FF; // binary: 11111111  
      inString[1] = (byte) 0x0000; // binary: 00000000  
      inString[2] = (byte) 0x00FF; // binary: 11111111  
      inString[3] = (byte) 0x0000; // binary: 00000000  
      inString[4] = (byte) 0x0000; // binary: 00000000
      int length = 5*8; // 40 bits in total 

      int step = 6; // steps to rotate
      byte[] outString = rotateLeft(inString, length, step);
      printBytes(inString, " Input");
      printBytes(outString, "Output");
   }
   private static byte[] rotateLeft(byte[] in, int len, int step) {
      int numOfBytes = (len-1)/8 + 1;
      byte[] out = new byte[numOfBytes];
      for (int i=0; i<len; i++) {
         int val = getBit(in,(i+step)%len);
         setBit(out,i,val);
      }
      return out;
   }
   private static int getBit(byte[] data, int pos) {
      int posByte = pos/8; 
      int posBit = pos%8;
      byte valByte = data[posByte];
      int valInt = valByte>>(8-(posBit+1)) & 0x0001;
      return valInt;
   }
   private static void setBit(byte[] data, int pos, int val) {
      int posByte = pos/8; 
      int posBit = pos%8;
      byte oldByte = data[posByte];
      oldByte = (byte) (((0xFF7F>>posBit) & oldByte) & 0x00FF);
      byte newByte = (byte) ((val<<(8-(posBit+1))) | oldByte);
      data[posByte] = newByte;
   }
   private static void printBytes(byte[] data, String name) {
      System.out.println("");
      System.out.println(name+":");
      for (int i=0; i<data.length; i++) {
         System.out.print(byteToBits(data[i])+" ");
      }
      System.out.println();
   }
   private static String byteToBits(byte b) {
      StringBuffer buf = new StringBuffer();
      for (int i=0; i<8; i++)
         buf.append((int)(b>>(8-(i+1)) & 0x0001));
      return buf.toString();
   }
}

Here is the output of the test program:

 Input:
11111111 00000000 11111111 00000000 00000000

Output:
11000000 00111111 11000000 00000000 00111111

I think getBit(), setBit(), and rotateLeft() are working correctly. What do you think?

Sections in This Chapter

setBit() - Storing a Bit into a Byte Array

getBit() - Retrieving a Bit from a Byte Array

rotateLeft() - Left Rotating All Bits in a Byte Array

bitStringTest.java - Testing Program

Dr. Herong Yang, updated in 2008
bitStringTest.java - Testing Program