在下面的代码(C语言)中,每次迭代时,1 << n一次又一次地计算?对于较大的输入,竞争性编程中的开销可能很大?
#define for(i,n) for(int i=0;i<(n);++i)
for(i,1<<n){
...
}
您的问题不是很清楚,但这不是编程问题,而是编译器优化问题。
在C中,大多数编译器将能够在循环内“看到”他修改过的内容,并修改条件。
因此,作为程序员,除非您有非常具体的约束和条件,否则不要担心这一点
所以,如果你这样做:
int n=10;
for(i=0;i<(1<<n);i++){
n=func(i)
}
1 <<n将在每次迭代时重新计算,而在这种情况下:
int n=10;
for(i=0;i<(1<<n);i++){
println(i)
}
很可能1 << n只计算一次