不使用(a+b)/2这种方式,求两个数的平均值。
程序代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int aver1(int a, int b)
{
//位运算求平均值分两部分
//两数平均值 = 相与后的值 + 异或后再右移一位的值
return (a & b) + ((a ^ b)>>1);
}
int aver2(int a, int b)
{
//(a+b)/2,拆分开后即 为a / 2 + b / 2
//除2相当于右移一位
return (a >> 1) + (b >> 1);
}
int main2()
{
int a, b;
printf("请输入a,b的值:");
scanf("%d %d", &a, &b);
printf("%d\n", aver1(a, b));
printf("%d\n", aver2(a, b));
system("pause");
return 0;
}
运行结果: