【发布时间】:2011-12-10 00:05:17
【问题描述】:
好的,我得到这段代码来做平均:(用 C 编写)
.
.
int sum[3];
int j;
int avg;
for(;;) //infinite loop
{
for(j=0;j<3;j++){
i = ReadSensor(); // function that keeps saving sensor values as int i
sum[j]=i;
}
avg=sum[0]+sum[1]+sum[2]+sum[3];
printf("Sonar: %d \r \n", avg >> 2);
}
.
.
这是正确的吗?我移动 2 以除以 avg / 2^(2) 即 4 问题是我期望值约为 15,但我得到约 8--9 .. 我不知道为什么会这样?
基本上传感器的读数在 15-17 之间波动,我想获得平均值而不是打印噪声值。我的代码正确吗?那为什么我会得到错误的输出!?
【问题讨论】:
-
虽然使用 shift 确实是除以 2 的幂的一种有效方法,但您应该注意,几乎所有现代编译器都会自动处理这种替换,提供与您编写的相同的性能更明显的 avg/2
-
谢谢,那我就用除法运算符了。
-
@TJD 一些嵌入式 C 编译器的优化有限。 Fendi,你打算用什么编译器编译?你打算在什么硬件上运行它(PC、PIC、AVR、Arduino 等)?也将这些添加为标签。