public class BitmaskTricks { public static void main(String[] args) { { int x; int n = 5; System.out.println("// int"); System.out.println("// starting to count from highest bit, n = " + n); x = -1 >>> n; System.out.printf("int a = -1 >>> n ; // %s (all but highest n bits set)\n", toBin(x)); x = ~(-1 >>> n); System.out.printf("int b = ~(-1 >>> n); // %s (highest n bits set)\n", toBin(x)); System.out.println("\n// starting to count from lowest bit, n = " + 5); x = -1 << n; System.out.printf("int c = -1 << n ; // %s (all bits higher than n set)\n", toBin(x)); x = ~(-1 << n); System.out.printf("int d = ~(-1 << n); // %s (lowest n bits set)\n", toBin(x)); } { long x; int n = 5; System.out.println("\n// long"); System.out.println("// starting to count from highest bit, n = " + n); x = -1L >>> n; System.out.printf("long e = -1L >>> n ; // %s (all but highest n bits set)\n", toBin(x)); x = ~(-1L >>> n); System.out.printf("long f = ~(-1L >>> n); // %s (highest n bits set)\n", toBin(x)); System.out.println("\n// starting to count from lowest bit, n = " + 5); x = -1L << n; System.out.printf("long g = -1L << n ; // %s (all bits higher than n set)\n", toBin(x)); x = ~(-1L << n); System.out.printf("long h = ~(-1L << n); // %s (lowest n bits set)\n", toBin(x)); } } public static String toBin(int x) { StringBuilder b = new StringBuilder("00000000000000000000000000000000"); String xStr = Integer.toBinaryString(x); b.replace(b.length() - xStr.length(), b.length(), xStr); b.append("₂"); return b.toString(); } public static String toBin(long x) { StringBuilder b = new StringBuilder("0000000000000000000000000000000000000000000000000000000000000000"); String xStr = Long.toBinaryString(x); b.replace(b.length() - xStr.length(), b.length(), xStr); b.append("₂"); return b.toString(); } }