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