Java Data Type How to - Performing Bitwise Operations with BigInteger








Question

We would like to know how to performing Bitwise Operations with BigInteger.

Answer

import java.math.BigInteger;
/*from  w w w .  ja va 2  s  .  c  o m*/
public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    boolean b = bi.testBit(3); 
    b = bi.testBit(16); 
  }
}

Get the value of a bit

import java.math.BigInteger;
/*from   ww w  . ja v  a 2 s . c o  m*/
public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    boolean b = bi.testBit(3); 
    b = bi.testBit(16); 
  }
}

Set a bit for BigInteger

import java.math.BigInteger;
//from   www.ja  va 2 s  . c o m
public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    bi = bi.setBit(3);

  }
}

Clear a bit in a BigInteger

import java.math.BigInteger;
/*w  w  w  . j  av  a2  s  .c om*/
public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    bi = bi.clearBit(3);

  }
}

Flip a bit in a BigInteger

import java.math.BigInteger;
/*  ww w. j ava 2 s .  co m*/
public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    bi = bi.flipBit(3);

  }
}

Shift the bits in a BigInteger

import java.math.BigInteger;
//ww  w .  j a v a 2  s  .  c  o m
public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    bi = bi.shiftLeft(3);

  }
}

Shift right in a BigInteger

import java.math.BigInteger;
/*  ww w  . j  a  v  a 2 s. co  m*/
public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    bi = bi.shiftRight(1);

  }
}

xor a BigInteger

import java.math.BigInteger;
/*from  w ww .ja  v a 2  s . c o  m*/
public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);

    bi = bi.xor(bi);
  }
}

and operation on BigInteger

import java.math.BigInteger;

public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    bi = bi.and(bi);
  }
}

not operation for BigInteger

import java.math.BigInteger;

public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    bi = bi.not();
  }
}

or operation for BigInteger

import java.math.BigInteger;

public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    bi = bi.or(bi);
  }
}

andNot operation on BigInteger

import java.math.BigInteger;

public class Main {
  public static void main(String[] argv) throws Exception {
    byte[] bytes = new byte[] { 0x1, 0x00, 0x00 }; 
    BigInteger bi = new BigInteger(bytes);
    bi = bi.andNot(bi);
  }
}

Retrieve the current bits in a byte array in twos-complement form.

import java.math.BigInteger;

public class Main {
  public static void main(String[] argv) throws Exception {
    byte[]  bytes = new byte[] { 0x1, 0x00, 0x00 };
    BigInteger bi = new BigInteger(bytes);
    bytes = bi.toByteArray();
  }
}