题目要求
找到两个二进制序列不同位有几位:
方法1:遍历两个二进制序列,每一位比较是否相等
int count_difer_bit(int n1, int n2) { int count = 0; int i = 0; //4个字节:32位,所以比较次数:32次 for (i = 0; i < 32; i++) { //两个数的二进制序列对应比特位与上1之后进行比较 if ( ( (n1 >> i) & 1 ) != ((n2 >> i) & 1) ) { count++; } } return count; } int main() { int n = 0; int m = 0; scanf("%d %d", &n, &m); int ret = count_difer_bit(n,m); printf("%d %d二进制序列中有%d位不同\n", n, m, ret); return 0; }
方法2:使用异或
异或:相同为0,相异为1
把要求的两个二进制序列异或起来,看异或后的结果有几个1,则原来的两个数就有几个二进制序列不同
//得到二进制序列有多少个1 int Numberf1(int n) { int count = 0; while (n) { n = n & (n - 1); count++; } return count; } //两个二进制比较 int count_diff_bit(int n1, int n2) { int count = 0; int t = n1 ^ n2; //n1 n2异或 count = Numberf1(t); return count; } int main() { int n = 0; int m = 0; scanf("%d %d", &n, &m); int ret = count_diff_bit(n,m); printf("%d %d二进制序列中有%d位不同\n", n, m, ret); return 0; }