不用(a +b)/2 的方法计算两个数的平均数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
//移位
int a = 0;
int b = 0;
float c = 0.5;
printf("please inter a and b:\n");
scanf("%d %d", &a, &b);
//printf("the average is %d",(b >>1)+(a >>1));
//printf("%d , %d", a >> 1, b >> 1);
//printf("%d", a + (b - a) / 2);
//printf("%d",(a&b)+(a^b)>>1);
if ((a % 2 == 1) && (b % 2 == 1))
{
printf("%d\n", 1 + (a >> 1) + (b >>1 ));
}
else if (((a % 2 == 0) && (b % 2 == 1)) || ((a % 2 == 1) && (b % 2 == 0)))
{
printf("%f\n", (b >> 1) + (a >> 1) + c);
}
else
{
printf("%d\n", (b >> 1) + (a >> 1));
}
system("pause");
return 0;
}
因为移位操作符对于偶数来说,向右移动一位,相当于除以二;对于奇数来说不是除以二,少0.5个单位,所以要分为三种情况讨论!
其中还有下面这条语句比较难理解,一般用于面试,仅供了解
printf("%d",(a&b)+(a^b)>>1);