How to reverse the bits of a number in Java

2 Answers

0 votes
public class MyClass {
    private static void print_bits(int n) {
    	System.out.println(String.format("%32s", Integer.toBinaryString(n)).replaceAll(" ", "0"));
    }
    
    private static int reverseBits(int num) {
    	int total_bits = (Integer.SIZE / Byte.SIZE) * 8;
    	int reversed_bits = 0;
    
    	for (int i = 0; i < total_bits; i++) {
    		if ((num & (1 << i)) != 0) {
    			reversed_bits |= 1 << ((total_bits - 1) - i);
    		}
    	}
    
    	return reversed_bits;
    }
    
    public static void main(String args[]) {
	    int num = 42;
	    print_bits(num);
	    num = reverseBits(num);
	    print_bits(num);
	    
	    System.out.println();

	    num = 19;
	    print_bits(num);
	    num = reverseBits(num);
	    print_bits(num);
    }
}




/*
run:
  
00000000000000000000000000101010
01010100000000000000000000000000

00000000000000000000000000010011
11001000000000000000000000000000
  
*/

 



answered Dec 20, 2023 by avibootz
edited Apr 4 by avibootz
0 votes
public class BitReverse {

    // Reverse bits using string operations (clear and idiomatic in Java)
    static int reverseBits(int n) {
        String bin = String.format("%32s", Integer.toBinaryString(n))
                         .replace(' ', '0');
        String reversed = new StringBuilder(bin).reverse().toString();
        return (int) Long.parseLong(reversed, 2);
    }

    // Format bits into 8‑bit groups
    static String bits(int n) {
        String bin = String.format("%32s", Integer.toBinaryString(n))
                         .replace(' ', '0');
        return bin.replaceAll("(.{8})", "$1 ").trim();
    }

    public static void main(String[] args) {
        int a = 19;
        int b = 3;

        int ra = reverseBits(a);
        int rb = reverseBits(b);

        System.out.println("Original 19: " + bits(a));
        System.out.println("Reversed 19: " + bits(ra));
        System.out.println();
        System.out.println("Original 3:  " + bits(b));
        System.out.println("Reversed 3:  " + bits(rb));
    }
}



/*
run:

Original 19: 00000000 00000000 00000000 00010011
Reversed 19: 11001000 00000000 00000000 00000000

Original 3:  00000000 00000000 00000000 00000011
Reversed 3:  11000000 00000000 00000000 00000000

*/

 



answered Apr 4 by avibootz
...