我有以下python代码:
a, b = 1, 1
for i in range(0, 100):
print a
a, b = b, a + b
它产生了这个: 1 1 2 3 五 8 等
我在c中写道:
#include <stdio.h>
long long unsigned int a = 1, b = 1;
void main(){
for(int i = 0; i < 100; i++){
printf("%llu \n", a);
a = b, b = a + b;
}
}
它产生了这个: 1 1 2 4 8 16 32 等
为什么c程序在使用完全相同的操作时会产生2的幂?
答案 0 :(得分:10)
a, b = b, a + b
python中的将值b
和a + b
打包成一个元组,然后将其解包回a
和b
。
C不支持该功能,而是使用逗号分隔分配,因此a = b, b = a + b
被翻译为
a = b;
b = a + b;
其中b
每次都会加倍,因为分配不是同步的。
要解决此问题,您必须单独分配每个变量:
b = a + b;
a = b - a; // a + b - a = b
答案 1 :(得分:3)
因为,
在C和python中有不同的含义。在python:
a, b = b, a + b
表示使用相应的值a
和b
修改b
和a+b
(同时)。
在C:
a = b, b = a + b;
表示执行a=b
,然后执行b=a+b
。
答案 2 :(得分:0)
你误解了comma operator。
#include <stdio.h>
#include <inttypes.h>
#include <stdint.h>
int main(void) {
uintmax_t a = 1, b = 1;
for (int i = 0; i < 100; i++) {
printf("%" PRIuMAX "\n", a);
b = a + b;
a = b - a;
}
}