有关符号 "&" "^" ">>"
"&"
//‘&’按位与 相同出1
// 1的二进制位00000000000000000000000000000001 &
// 例m=15 00000000000000000000000000001111
// &运算后就得00000000000000000000000000000001 (结果出1)
//如果m =14 00000000000000000000000000001110 (结果出0)
"^"
// '^'按位与或 相同出0 不同出1
//例:15^8 (1111) ^ (0100) = 1011
">>"
//“>>”右移 把最后一位(右边最后一位去掉) 左边补0
//例: m=15 00000000000000000000000000001111
//右移后得到 00000000000000000000000000001110
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//方法一:循环次数多
void my_count(int m, int n)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if ((m & 1) != (n & 1))
//通过每次比较二进制位最后一位是否相同
//‘&’按位与 相同出1
// 1的二进制位00000000000000000000000000000001 &
// 例m=15 00000000000000000000000000001111
// &运算后就得00000000000000000000000000000001 (结果出1)
//如果m =14 00000000000000000000000000001110 (结果出0)
{
count++;
}
m = m >> 1;
//“>>”右移 把最后一位(右边最后一位去掉) 左边补0
//例: m=15 00000000000000000000000000001111
//右移后得到 00000000000000000000000000001110
n = n >> 1;
}
printf("%d\n", count);
}
int main()
{
int m = 0;
int n = 0;
scanf(" %d %d", &m, &n);
my_count(m, n);
return 0;
}
//方法二:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void my_count(int m, int n)
{
int count = 0;
int i = 0;
i = (m ^ n);
//'^'按位与或 相同出0 不同出1
//例:15^8 (1111) ^ (0100) = 1011
//再用按位与求里面有几个1
while (i)
{
i = (i & (i - 1));
count++;
}
printf("%d\n", count);
}
int main()
{
int m = 0;
int n = 0;
scanf(" %d %d", &m, &n);
my_count(m, n);
return 0;
}