i = i& 1在C编程语言中意味着什么?

时间:2015-11-18 18:25:54

标签: c loops gcc syntax

我有这个示例代码,我真的不明白它是如何工作的。它由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

3 个答案:

答案 0 :(得分:6)

在for-Loop的开头:

  • 我被设置为5

下一步是:检查i--,这意味着:

  • 首先:i = 5> 0 =>真
  • 第二:将i设为i - 1 => i = 4

下一步:做内部块。

下一步:i = i& 1,结果是:

  • 4& 1 => 0100& 0001 => i = 0

下一步:检查i -

  • 首先:i = 0 =>假的
  • 第二:将i设为i - 1 => i = -1

答案 1 :(得分:5)

&bitwise AND运营商

i = i&1 // this AND's bits of i to bits of value 1

答案 2 :(得分:4)

i = i&1将提取i的最低有效位,因为&bitwise AND运算符。

但是,您编写的程序是Undefined Behavior(g ++错误)。这是因为您在i循环中定义for,一旦循环结束,i超出范围。因此,在下一行中打印它会产生错误。

来到你的代码,我真的很想知道你在哪里看到它,因为它对我来说似乎很可怕。 for循环的条件似乎很复杂,我无法解释循环如何运行(这可能不是一件好事)。