两个整数二进制表达中,有多少个位(bit)不同
2015-10-31 21:17
232 查看
编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:1999 2299
输出例子:7
1、利用移位运算,将32位二进制数保存在数组中,然后比较两个数组中各个元素是否相同。
代码如下:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:1999 2299
输出例子:7
1、利用移位运算,将32位二进制数保存在数组中,然后比较两个数组中各个元素是否相同。
代码如下:
#include<stdio.h> #include<stdlib.h> int main() { int m,n,arr1[32],arr2[32],i=0,count=0; scanf("%d%d",&m,&n); for(i=0;i<32;i++) { arr1[i]=(m>>i)&1;//通过移位和与运算,将二进制数保存在数组中 } for(i=0;i<32;i++) { arr2[i]=(n>>i)&1; } for(i=0;i<32;i++) { if(arr1[i]!=arr2[i])//比较两个数组中相应元素是否相等 count++; } printf("count=%d",count); system("pause"); return 0; }2、直接进行异或(二进制按位异或),然后求取“1”的个数。
#include<stdio.h> #include<stdlib.h> int main() { int num1,num2,num; int count=0; scanf("%d%d",&num1,&num2); num=num1^num2;//用异或法方便解,例如:num1为1011和num2为0001,则num为1010, while(num) { count++; num=num&(num-1);//依次取掉后面的1。(num-1)&num为(1010-0001)&1001=1000 } printf("count=%d\n",count); system("pause"); return 0; }
相关文章推荐
- mysql binlog二进制日志详解
- 详解C++编程中对二进制文件的读写操作
- 整理C# 二进制,十进制,十六进制 互转
- c#二进制逆序方法详解
- JS幻想 读取二进制文件第1/2页
- 使用jscript实现二进制读写脚本代码
- C#二进制序列化实例分析
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
- javascript 二进制运算技巧解析
- JavaScript中按位“异或”运算符使用介绍
- 如何判断一个整数的二进制中有多少个1
- MSSQL 将截断字符串或二进制数据问题的解决方法
- 二进制中1的个数
- C++ 十进制转换为二进制的实例代码
- C语言十进制转二进制代码实例
- C++二进制翻转实例分析
- PowerShell把IP地址转换成二进制的方法
- 科学知识:二进制、八进制、十进制、十六进制转换
- C#读取二进制文件方法分析
- Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)