两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:
7
#include <stdio.h>
int main()
{
int a,b;
int count;
a =0;
b = 0;
count = 0;
printf("请输入两个数");
scanf("%d %d",&a,&b);
a = a^b;
while(a)
{
++count;
a = a & (a-1);
}
printf("%d",count);
return 0;
}
编写函数:
unsigned int reverse_bit(unsigned int value);
这个函数的返回 值value的二进制位模式从左到右翻转后的值。
#include <stdio.h>
int main()
{
int num = 0;
int end = 0;
int p = 0;
int i = 0;
printf("请输入一个数");
scanf("%d",&num);
for( i = 31;i >= 0;i--)
{
p = (num & 1) << i;
num = num >> 1;
end += p;
}
printf("%u",end);
return 0;
}
不使用(a+b)/2这种方式,求两个数的平均值。
#include <stdio.h>
int main()
{
int avg;
int a,b;
avg =0;
a = 0;
b = 0;
printf("请输入两个数");
scanf("%d %d",&a,&b);
avg = ((a & b) << 1)+(a ^ b) >> 1;
printf("平均数是%u",avg);
return 0;
}
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。
#include <stdio.h>
int main()
{
int i,j;
int arry[] = {7,7,88,88,9,66,66,4,4};
j = arry[0];
for(i =1; i < sizeof(arry)/sizeof(arry[0]);i++)
{
j ^= arry[i];
}
printf("%u",j);
return 0;
}
本文出自 “剩蛋君” 博客,请务必保留此出处http://memory73.blog.51cto.com/10530560/1677174