*2的十六次方25536
定义两个取mean的函数,其中一个sum定义为short型,最大可存储65535,另一个定义为long。我们可以看到用mean1求arr2的平均值时出现了溢出的情况,机器把溢出的1当作符号处理了。
#include <stdio.h>
#define N 4
int main()
{
short mean1(short d[],short num);
short mean2(short d[],short num);
short arr1[N]={32767,32767,0,-32767};
short arr2[N]={32767,32767,1,-32767};
printf("the mean1 for the arr1 is: %d\n",mean1(arr1,N));
printf("the mean2 for the arr1 is: %d\n",mean2(arr1,N));
printf("the mean1 for the arr2 is: %d\n",mean1(arr2,N));//超出范围乱码 把首位溢出的1当做符号
printf("the mean2 for the arr2 is: %d\n",mean2(arr2,N));
}
short mean1(short d[],short num)
{
short i;
short sum=0;
for(i=0;i<num;i++)
sum+=d[i];
return sum/num;
}
short mean2(short d[],short num)
{
short i;
long sum=0;
for(i=0;i<num;i++)
sum+=d[i];
return sum/num;
}