Mega Code Archive

 
Categories / Java / Language Basics
 

Bit-level unpacking of floating-point data

/* Java Programming for Engineers Julio Sanchez Maria P. Canton ISBN: 0849308100 Publisher: CRC Press */ // Java for Engineers //Filename: BitOps //Reference: Chapter 24 //Description: //         Bit-level unpacking of floating-pioint data //Requires: //         Keyin class in current directory class BitOps {   public static void main(String[] args) {     // Definition of bit field masks for double     final long SIGN = 0x8000000000000000L;     final long EXPN = 0x7ff0000000000000L;     final long SGNF = 0x000fffffffffffffL;     final long BIT1 = 0x8000000000000000L;     // Storage for bit fields     long s; // Sign     long e; // Exponent field     long m; // Significand (mantissa) field     String eS; // For conversions     double num;     long binVal;     long t;     // Get user input     num = 3.4d;     binVal = Double.doubleToRawLongBits(num);     // Display hex bits     System.out.println("As long = " + Long.toHexString(binVal));     // Display bit fields of double format     s = binVal & SIGN;     if (s != 0)       System.out.println("Sign = -");     else       System.out.println("Sign = +");     // Mask out exponent field     e = (binVal & EXPN);     eS = Long.toHexString(e);     System.out.println("Exponent = " + eS);     // Mask out significand field     m = (binVal & SGNF);     eS = Long.toHexString(m);     System.out.println("Significand = " + eS);     System.out.println("\nFields in binary");     if (s != 0)       System.out.println("Sign bit = 1");     else       System.out.println("Sign bit = 0");     // Display binary exponent     // Eliminate sign bit     e = e << 1;     System.out.print("Exponent = ");     for (int k = 0; k < 11; k++) {       t = e & BIT1;       // System.out.println(Long.toHexString(t));       if (t != 0)         System.out.print("1");       else         System.out.print("0");       e = e << 1;     }     System.out.println("\n           |-11 bits-|");     // Display binary significand     // Eliminate exponent and sign bits     m = m << 12;     System.out.print("Significand = 1.");     for (int j = 0; j < 51; j++) {       t = m & BIT1;       if (t != 0)         System.out.print("1");       else         System.out.print("0");       m = m << 1;     }     System.out.println("\n              ^ |");     System.out.println("implicit bit -| | ----- 52 bits -->");   } }