我得到了这个示例代码,我真的不明白它是如何工作的。它由GCC编译,完全没有错误。
另外,你能告诉我这段代码“i = i&1”是做什么的吗?谢谢!
int main(void){
int i;
for (i = 5; i--; i = i&1) {
puts("iteration");
}
printf("%d\n",i);
return 0;
}
该计划的输出是:
迭代
-1
在for-Loop的开头:
下一步是:检查i--,这意味着:
下一步:做内部块。
下一步:i = i&1,结果如下:
下一步:入住 -
&
是bitwise AND
运营商
i = i&1 // this AND's bits of i to bits of value 1
i = i&1
将提取最不重要的i
位,因为&
是bitwise AND
算子。
但是,您编写的程序是Undefined Behavior(g ++错误)。这是因为你在i
循环中定义for
,一旦循环结束,i
超出范围。因此,在下一行中打印它会产生错误。
来到你的代码,我真的很想知道你在哪里看到它,因为它对我来说似乎很可怕。 for
循环的条件似乎很复杂,我无法解释循环如何运行(这可能不是一件好事)。