计算两个数的平均数 【1】
int Avg_Num(int a, int b) { int num = 0; num = (b + a) / 2; return num; }【2】右移操作符 >>逻辑移位情况下 0000 0000 0000 0000 0000 0000 0000 0011 0000 0000 0000 0000 0000 0000 0000 0001 相当于除法,除以2
int Avg_Num(int a, int b) { return (a + b) >> 1; /*int num = 0; num = (b + a) / 2; return num; int num = 0; num = (b - a) / 2 + a; return num; */ }一般而言,求取平均数都是用上述方法,因为有进位会造成溢出,下面我将介绍两种方法来求取平均数。 使用b-a除以2,将b多出a的那一部分平分,最后将(b-a)/2加到a 上,实现两个数对于平均数的求取。从而避免的溢出这个问题。
#include<stdio.h> #include<stdlib.h> int Avg_Num(int a, int b) { int num = 0; num = (b - a) / 2 + a; return num; } int main() { int a, b; printf("请输入两个数字:\n"); scanf_s("%d %d", &a, &b); printf("%d\n",Avg_Num(a, b)); system("pause"); return 0; }异或相当于将相等的数字置零,不等的数字相加,因为不会有两个1相加的情况,因此不会有进位,不相等的部分使用右移操作符相当于除以2,a&b相当于留下了相同的位数。两者相加相当于求取平均数。
int Avg_Num(int a, int b) { return ((a&b) + ((a^b) >> 1)); }
