题目:
编程实现:两个int(32位)整数 m 和 n 的二进制表达中,有多少个位(bit)不同?
输入例子 :
1999 2299
输出例子 : 7
=========================================================================
思路:
总体思路:
把 m 异或 n 后,有几个相异就有几个1,再计算下二进制有几个1即可
(1). 编写函数:number_of_1() ,计算二进制中有几个1。
(2). 在主函数中,把 m ^ n (m 异或 n)的结果作为参数传给 number_of_1() 函数
第一步:
编写函数:number_of_1() ,计算二进制中有几个1:
(1). 函数返回值:int ,返回二进制中1的个数;
函数形参:int m
(2). 设置计数器 count,统计二级制中 1 的个数
(3). 使用 while循环,循环统计,只要m不为0就继续循环
(4). 使用 m = m & (m - 1); -- 去掉二进制中最右边的1,再赋给m本身,
去掉一个1,计数器count就++。
实现代码:
#include <stdio.h> //编写函数: int number_of_1(int m) //函数返回值:int ; 函数形参:int m { //设置计数器: int count = 0; //使用while循环 while (m) //如果m不为0,就说明二进制中还有1,则继续循环 { //使用公式: m = m & (m - 1); //去掉最右边的1 count++; //计数器++ } } int main() { return 0; }
实现图片:
第二步:
主函数:
(1). 输入两个参数:m 和 n
(2). 把 m ^ n (m 异或 n)的结果作为参数传给 number_of_1() 函数,
并用一个变量接收返回值
(3). 打印返回值
实现代码:
#include <stdio.h> //编写函数: int number_of_1(int m) //函数返回值:int ; 函数形参:int m { //设置计数器: int count = 0; //使用while循环 while (m) //如果m不为0,就说明二进制中还有1,则继续循环 { //使用公式: m = m & (m - 1); //去掉最右边的1 count++; //计数器++ } } int main() { //输入两个数: int m = 0; int n = 0; scanf("%d %d", &m, &n); //异或:相同为0,相异为1 int ret = number_of_1(m ^ n); //打印: printf("%d", ret); return 0; }
实现图片:
最终代码和实现效果
最终代码:
#include <stdio.h> //编写函数: int number_of_1(int m) //函数返回值:int ; 函数形参:int m { //设置计数器: int count = 0; //使用while循环 while (m) //如果m不为0,就说明二进制中还有1,则继续循环 { //使用公式: m = m & (m - 1); //去掉最右边的1 count++; //计数器++ } } int main() { //输入两个数: int m = 0; int n = 0; scanf("%d %d", &m, &n); //异或:相同为0,相异为1 int ret = number_of_1(m ^ n); //打印: printf("%d", ret); return 0; }
实现效果: