什么i = 1&lt; <i mean =“”in =“”c?=“”

时间:2016-05-20 22:42:35

标签: c

=“”

我有这个源代码:< p>

void main() {
  int a[10]={9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; int i;
  for (i=0; i<10; i=1<<i) a[9-i]=a[i];
  for (i=1; i<10; i++) a[0]+=a[i];
  printf("%d", a[0]);
}

由于我是C编程的新手,我不太了解它的作用。 i=1<<i在for循环中的含义是什么?

3 个答案:

答案 0 :(得分:2)

1<<i是按位左移运算符。如果你认为1为00001,它会将1左移i次。循环将结果反馈回自身。

  • 1<<0是00001或1。
  • 1<<1是00010或2。
  • 1<<2是00100或4。
  • 1<<4为10000或16。

从0开始并在4处停止,因为16大于10。

您可以通过执行相同的循环并打印i来查看此操作。

#include <stdio.h>

int main() {
    for (int i=0; i<10; i=1<<i) {
        printf("%d\n", i);
    }

    return 0;
}

为什么你会这样做,我不确定。

答案 1 :(得分:1)

操作员<<称为左移。它将第一个参数中的位向左移位第二个参数中给出的位数。其操作仅针对无符号类型定义。在您的代码中,i向左移动了1位,移位的结果将放回i。这与乘以2的幂相同。

另外,你应该写int main()void版本错误且非标准。

答案 2 :(得分:1)

左移位运算符<<在C中的优先级高于=

首先,值1(0x00000001)向左移位位数(按i中的计数。

然后将结果分配回i