C程序在16位处理器中获得2个数字的平均值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C程序在16位处理器中获得2个数字的平均值相关的知识,希望对你有一定的参考价值。

我们如何用C编写一个程序,它可以计算16位处理器上2个16位有符号数的平均值。

int getAverage(int x, int y)
{
   int result=0;
   result = ((x+y)/2);
   return result;
} 

除了x和y都是最大值65535之外,上述情况适用于大多数情况。

答案

在x和y都是正数或负数的情况下,我将数字之间的差除以2,并将该结果与减去的数相加。在数学上,这相当于你现在拥有的:

(y - x)/ 2 + x = y / 2 - x / 2 + x = y / 2 + x / 2 =(x + y)/ 2

如果x为正且y为负数,反之亦然,则应使用原始计算方法。

另一答案

使用粗略整数舍入的最简单的解决方案:

int32_t getAverage (int16_t x, int16_t y)
{
   int32_t sum = (int32_t)x + (int32_t)y;
   return sum/2 + sum%2;
} 

这样可以正常工作,因为您的16位编译器将具有处理32位整数的软件例程。

以上是关于C程序在16位处理器中获得2个数字的平均值的主要内容,如果未能解决你的问题,请参考以下文章

怎样写数字滤波程序?

用C语言写:36个数字平均分成4组(每组九个数字)有多少种分法,并显示分组

汇编中三个数字的平均值

写一个c程序辨别系统是16位or32位

如何在Python中保留小数?

C中的无符号整数在java中的处理