Bootstrap

C语言初阶

1题目

计算两个整数 m 和 n 的二进制表示中不同位的数量

2解题思路

  1. count_dff 函数

    • 该函数接收两个整数参数 m 和 n,并返回它们二进制表示中不同位的数量。
    • count 变量用于记录不同位的数量,初始化为 0。
    • for 循环从 0 到 31 进行迭代,因为在大多数常见的系统中,int 类型是 32 位的。
    • 在每次循环中,通过右移操作 (m >> i) 和 (n >> i) 将 m 和 n 的第 i 位移动到最低位,然后使用按位与操作 & 1 提取最低位的值。
    • 如果 m 和 n 的第 i 位不同,则 ((m >> i) & 1) != ((n >> i) & 1) 条件成立,count 加 1。
    • 最后返回 count
    • main 函数

      • 定义两个整数变量 m 和 n,用于存储用户输入的两个整数。
      • 使用 scanf 函数从标准输入读取两个整数,并分别存储到 m 和 n 中。
      • 调用 count_dff 函数计算 m 和 n 的二进制表示中不同位的数量,并将结果存储在 ret 变量中。
      • 使用 printf 函数将结果输出到标准输出。
      • 返回 0 表示程序正常结束。

3解法一

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int count_dff(int m, int n)
{
	int count = 0;
	int i = 0;
	for (i = 0;i < 32;i++)
	{
		if (((m >> i) & 1) != ((n >> i) & 1))
			count++;
	}
	return count;
}
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d",& m,& n);
	int ret = count_dff(m, n);
	printf("%d", ret);
	return 0;
}
4 解法二

可以使用异或操作 ^ 来简化代码,异或操作会将两个数的不同位设置为 1,相同位设置为 0。

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int count_dff(int m, int n)
{
	int xor_result = m ^ n;
	int count = 0;
	while (xor_result)
	{
		count++;
		xor_result &= (xor_result - 1);
	}
	return count;
}

int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	int ret = count_dff(m, n);
	printf("%d", ret);
	return 0;
}

 

;