我有这个源代码:< 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循环中的含义是什么?
答案 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