求两个数的平均值的不同写法:
<1>
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
float ave = 0.0;
scanf("%d%d", &a, &b);
ave = (a + b) / 2.0;
printf("ave = %lf", ave);
system("pause");
return 0;
}
使用这种方法的话,当数值过大的时候就会出现栈溢出的情况,所以我们一般不采用这种写法!
<2>
int main()
{
int a = 0;
int b = 0;
float ave = 0.0;
scanf("%d%d", &a, &b);
ave = a - (a - b) / 2.0;
printf("ave = %lf", ave);
system("pause");
return 0;
}
这种方法就避免了栈溢出的问题!
<3>
int main()
{
int a = 0;
int b = 0;
float ave = 0.0;
scanf("%d%d", &a, &b);
ave = (a + b) >> 1;
printf("ave = %lf", ave);
system("pause");
return 0;
}
这种方法用到了移位操作符(包括 右移操作符>> 和左移操作符<<)
特别注意右移操作时分为两种情况:
1、算术右移;
2、逻辑移位。
算术右移情况指的是:二进制数有正负之分,补位时要注意符号位;
逻辑移位情况指的是:不需要考虑符号产生的问题,直接补0即可。
左移操作相当于/2;
右移操作相当于*2。
<4>
int main()
{
int a = 0;
int b = 0;
float ave = 0.0;
scanf("%d%d", &a, &b);
ave = (a&b) + (a^b) / 2;
printf("aver = %lf", ave);
system("pause");
return 0;
}
这里用到了按位与(&)和按位异或(^),按位异或除了这个用法,还可以用于交换两个数