BigInteger Bitwise Operations

import java.math.BigInteger;
public class BigIntegerBitwiseDemo {
public static void main(String[] args) {
BigInteger a = new BigInteger("60"); // Binary: 0011 1100
BigInteger b = new BigInteger("13"); // Binary: 0000 1101
System.out.println("a = " + a + " (" + a.toString(2) + ")");
System.out.println("b = " + b + " (" + b.toString(2) + ")");
// AND
System.out.println("\na AND b: " + a.and(b) + " (" + a.and(b).toString(2) + ")");
// OR
System.out.println("a OR b: " + a.or(b) + " (" + a.or(b).toString(2) + ")");
// XOR
System.out.println("a XOR b: " + a.xor(b) + " (" + a.xor(b).toString(2) + ")");
// NOT
System.out.println("NOT a: " + a.not()); // Inverts all bits (infinite-length signed)
// Shift Left
System.out.println("\na << 2: " + a.shiftLeft(2) + " (" + a.shiftLeft(2).toString(2) + ")");
// Shift Right
System.out.println("a >> 2: " + a.shiftRight(2) + " (" + a.shiftRight(2).toString(2) + ")");
// Set Bit
System.out.println("\nSet bit 0 in a: " + a.setBit(0) + " (" + a.setBit(0).toString(2) + ")");
// Clear Bit
System.out.println("Clear bit 2 in a: " + a.clearBit(2) + " (" + a.clearBit(2).toString(2) + ")");
// Flip Bit
System.out.println("Flip bit 4 in a: " + a.flipBit(4) + " (" + a.flipBit(4).toString(2) + ")");
// Test Bit
System.out.println("\nIs bit 3 in a set? " + a.testBit(3));
// Bit Count
System.out.println("Number of set bits in a: " + a.bitCount());
// Bit Length
System.out.println("Bit length of a: " + a.bitLength());
}
}