【发布时间】:2017-06-20 20:12:06
【问题描述】:
我是一名大学生,所以我还在学习很多东西。我在做一个项目时遇到了一些有趣的事情。我有这段代码在它没有放在 for 循环中时可以工作,但在它放置时不起作用。我只是想明白为什么。这是我的代码:
void setup() {
Serial.begin(9600);
int a[8];
for(int i=0;i<8;i++) {
a[i]=pow(2,i);
}
for(int i=0;i<8;i++) {
Serial.print(a[i]);
}
}
void loop() {
}
这是没有第一个 for 循环(数据被写入数组)编写的相同代码:
void setup() {
Serial.begin(9600);
int a[8];
a[0]=pow(2,0);
a[1]=pow(2,1);
a[2]=pow(2,2);
a[3]=pow(2,3);
a[4]=pow(2,4);
a[5]=pow(2,5);
a[6]=pow(2,6);
a[7]=pow(2,7);
for(int i=0;i<8;i++) {
Serial.print(a[i]);
}
}
void loop() {
}
第一个代码输出:
1
2
3
7
15
31
63
127
当第二个代码输出时:
1
2
4
8
16
32
64
128
有人知道吗?我真的很想知道为什么。
【问题讨论】:
-
这是你的全部代码吗?
-
1) 不要发送无关语言的垃圾标签。 2) 阅读How to Ask。
-
如果你进入嵌入式系统,更喜欢
(1 << i)而不是pow(2,i)。后一个函数返回浮点数,而第一个函数通常可以翻译成一个或两个汇编语言指令。 -
我的印象是 C 和 C++ 中的 arduino 想法。还有,对不起。这是我第一次发帖。
-
@ThomasMatthews -- 这可能是对两种方法之间差异的解释。第二个使用常量,所以对‘pow’的调用是replac d。 Y 一个转变,反过来又被优化了。第一个将变量传递给
pow,因此更难优化。
标签: arduino