static int countDifferingBits(byte[] array1, byte[] array2) { int n = array1.length; int diff = 0; for i to n: diff += Int.bitCount(ubyteToInt(array1[i])^ubyteToInt(array2[i])); ret diff; } static int countDifferingBits(int[] array1, int[] array2) { int n = array1.length; int diff = 0; for i to n: diff += Int.bitCount(array1[i]^array2[i]); ret diff; } static int countDifferingBits(long[] array1, long[] array2) { int n = array1.length; int diff = 0; for i to n: diff += Long.bitCount(array1[i]^array2[i]); ret diff; } // use sub-array of array2 static int countDifferingBits(long[] array1, long[] array2, int i1) { int n = array1.length; int diff = 0; for i to n: diff += Long.bitCount(array1[i]^array2[i1+i]); ret diff; }