//一个二进制数和1相与,就可以知道这个二进制数的最后一位是1还是0 //因为1和1相与还是1, 而0和1相与还是0 int countBitDiff(int m, int n ) { int cnt = 0; for(int i = 0; i < 32; i++) //右移0位时检查最后一位是1还是0 //右移1位时检查倒数第二位是1还是0 { if((m >> i & 1) != (n >> i & 1)) cnt++; //一直到右移31位,检测倒数第32位也就是最高位 } return cnt; } //当然也可以从最高位向最低位检查 //即for(int i = 31; i >= 0; i--)