Bitwise Operator

I learned bitwise operator, so here is the note for my learning. This link helped me a lot to understand what and how useful they are. Here are some functions I created to master bitwise opereator. Most of them are from the link above.

public static boolean isPowerOf2(int n) {
	return n != 0 && ((n & (n - 1)) == 0);
}

public static int powerOf2(int power) {
	return 1 << power;
}

public static int count1InBinary(int n) {
	int count = 0;
	while (n != 0) {
		n = n & (n - 1);
		count++;
	}
	return count;
}

// i starts from 0
public static boolean isIth1InBinary(int n, int i) {
	if ((n & (1 << i)) != 0) {
		return true;
	} else {
		return false;
	}
}

// Recursively O(n^3)
public static void printSubsets(char[] elements, int index, int[] a) {
	if (index == elements.length) {
		for (int i = 0; i < a.length; i++) {
			if (a[i] == 1) {
				System.out.printf("%c", elements[i]);
			}
		}
		System.out.println();
	} else {
		printSubsets(elements, index + 1, a);
		a[index] = 1;
		printSubsets(elements, index + 1, a);
		a[index] = 0;
	}
}

// Bitwisely O(n^3)
public static void printAllSubsets(char[] elements) {
	int n = elements.length;
	for (int i = 0; i < 1 << n; i++) {
		for (int j = 0; j < n; j++) {
			if ((i & (1 << j)) != 0) {
				System.out.printf("%c", elements[j]);
			}
		}
		System.out.println();
	}
}

I found a link that lists many functions that take advantages of bitwise operator.