在下面的代码(C语言)中,每次迭代时,1 << n一次又一次地计算?

问题描述 投票:1回答:1

在下面的代码(C语言)中,每次迭代时,1 << n一次又一次地计算?对于较大的输入,竞争性编程中的开销可能很大?

#define for(i,n) for(int i=0;i<(n);++i)
for(i,1<<n){
    ...
}
for-loop bit-shift
1个回答
1
投票

您的问题不是很清楚,但这不是编程问题,而是编译器优化问题。

在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只计算一次

© www.soinside.com 2019 - 2024. All rights reserved.