要求不使用(a+b)/2这种方式,求两个数的平均值,可以用位运算来实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int average(int x, int y) {
//将x和y分成二进制位都为1或0和不同两部分
//x&y 1&1=1;0&0=0,相当于x,y相加除以二,也就是它本身。
//x^y 当x的二进制位为1,y的二进制位为0或相反时,1^0=1,1>>1右移1位作用相当于除以2
//两部分合起来就是(x+y)/2
int c = (x&y) + ((x^y)>>1);
return c;
}
int main() {
int num1 = 0, num2 = 0;
printf("输入两个数,求它们的平均值:");
scanf("%d%d",&num1,&num2);
int ret = average(num1, num2);
printf("%d\n", ret);
system("pause");
return 0;
}