求出两个int(32位)整数m和n的二进制表达中,有多少bit位不同

#include<stdio.h>

#define MAX(X,Y) ((X)<(Y)?(X):(Y))

int main()

{

int a


= 1999;

int b = 2299;

int num = 1;

int nam;

if (b % 2 == 1)

{

nam = 1;

}

else

{

nam = 0;

}

do

{

int A = a % 2;

int B = b % 2;

if (A != B)

{

num++;

}

else

{

num = num;

}

a = a / 2;

b = b / 2;

}while (b!=nam);

printf("%d", num);

}

方法二;

#include<stdio.h>

#define MAX(X,Y) ((X)>(Y)?(X):(Y))

int num_sing(int max)

{

if (max % 2 == 0)

{

return 0;

}

else

{

return 1;

}

}

int main()

{

int a = 1999;

int b = 2299;

int i = 0;

int num = 0;

int max = MAX(a, b);

int sing = num_sing(MAX(a, b));

int cishu =0+sing;

while (max!= sing)

{

max = max / 2;

cishu++;

}

for (i = 0; i < cishu; i++)

{

if ((a&1)!=(b&1))

{

num++;

}

a = a >> 1;

b = b >> 1;

}

printf("%d", num);

}

时间: 2024-10-31 15:10:30

求出两个int(32位)整数m和n的二进制表达中,有多少bit位不同的相关文章

世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7

这是小米2015年暑假实习生第一道笔试题,其实不难,主要用到移位操作和或运算符就可以搞定,具体代码如下: /*世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 */ #include<stdio.h> int countBitDiff(int m, int n) { int data=1; int a,b; int count=0; for(int i=0;i<31;i+

两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

 第一种: #include<stdio.h> #include<stdlib.h> int main() {  int m,n,u;  int count=0;  scanf("%d%d",&m,&n);  u=m^n;  while(u)  {   count++;   u=u&(u-1);  }  printf("%d",count);  system("pause");  return 0;

编程实现: 两个int(32位)整数m和n的二进制表达中, 有多少个位(bit)不同?

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){int num1 = 1999;int num2 = 2299;int count = 0;int ret = num1^num2; //比特位不同异或后结果为1while (ret){ret = ret&(ret - 1);count++;} //将异或后的1输出,即有几个比特位不同printf("%d&q

两个int整数m和n的二进制表达有多少个位不同

题目描述 世界上有10种人,一种懂二进制,一种不懂.那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 题目分析 二进制中,统计两个数的相应位(bit)相同可以采用异或操作,异或运算结果相同为0不同为1.所以两个数异或的结果中1就是相同位数. public static int count(int a, int b) { int m = a ^ b; int num = 0; while(m>0) { m &= (m-

c语言:输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n

输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n? 解:第一步求这两个数的异或运算,将异或运算结果存起来:第二步统计这个运算结果当中1的位数 程序: #include<stdio.h> int count(int m,int n) { int t,count=0; t = m^n; while (t) { count++; t=t&(t-1); } return count; } int main() { int num1,num2,ret=0; printf(&qu

关于求出两个整形数组不同元素,要求效率最高

由于两个数组,一比较就会出现两次for循环,所以我能想到的就是组合求出现次数,这样子,就不会出现两次for循环,上代码,希望有看到的提出更好的方法 1 #include <iostream> 2 using namespace std; 3 4 void printarray(int *arr, int size) 5 { 6 if (arr == nullptr) 7 { 8 return; 9 } 10 cout << endl; 11 for (int i = 0; i &l

c编程:求出4&amp;#215;4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。

//求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max,min; int max1,max2;//记录最大值的坐标 int min1,min2;//记录最小值的坐标 int i,j; int a[4][4]; //为数组赋值 for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf("%d",&

【C语言】不使用大小于号,求出两数最大值

//不使用大小于号,求出两数最大值 #include <stdio.h> #include <math.h> double Max(double a, double b) { double q = sqrt((a-b)*(a-b)); return ((a + b) + q) / 2; } int main() { printf("(5,8)大的数为:%.0f\n", Max(5, 8)); printf("(0,4)大的数为:%.0f\n"

c编程:求出4&#215;4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。

//求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max,min; int max1,max2;//记录最大值的坐标 int min1,min2;//记录最小值的坐标 int i,j; int a[4][4]; //为数组赋值 for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf("%d",&