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

C program to get average of 2 numbers in a 16 bit processor

我们如何用 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 位整数的软件例程。