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个数字的平均值的主要内容,如果未能解决你的问题,请参考以下文章