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

问题描述 投票:-3回答:3

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

c loops gcc syntax
3个回答
6
投票

在for-Loop的开头:

  • 我被设定为5

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

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

下一步:做内部块。

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

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

下一步:入住 -

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

5
投票

&bitwise AND运营商

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

4
投票

i = i&1将提取最不重要的i位,因为&bitwise AND算子。

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

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

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