我似乎有这个'for'循环的一些问题,这是一个考试问题,我不明白为什么我的逻辑是不正确的。C - 基本For循环
int n = 1, r, i;
for(i=0; i<5; i++)
n *= 2;
r = n--;
查找此代码运行后r和n的值。
这里是我的这个逻辑(在纸面上,因此图像链接): Image
正确的输出。然而,N = 31且r = 32。为什么是这样?我哪里错了?
我似乎有这个'for'循环的一些问题,这是一个考试问题,我不明白为什么我的逻辑是不正确的。C - 基本For循环
int n = 1, r, i;
for(i=0; i<5; i++)
n *= 2;
r = n--;
查找此代码运行后r和n的值。
这里是我的这个逻辑(在纸面上,因此图像链接): Image
正确的输出。然而,N = 31且r = 32。为什么是这样?我哪里错了?
行r = n--;
在分配给r后递减n。
这不是for
问题,而是--n
和n--
。
n--
作为表达n--
的值第一返回n
,然后执行减法n <- n-1
。
--n
先做减法n <- n-1
,然后返回n
新价值的--n
int n = 1, r = 0, i;
for(i=0; i<=5; i++)
r *= 2;
n = r--;
下面是最终答案。去检查它。希望能帮助到你。
由于'r'在最后一次减少之前被分配了'n'的值,所以不会将_rr初始化为0,也不是必需的。删除“我”的声明是错误的。但是,为什么你想改变'for'语句的控制表达式呢?问题是关于为什么这段代码分别产生32和31的'r'和'n'的最终值。 –
嗨,我只是更新了我的答案。谢谢 – JohnC
为什么它应该是'32'? –
因为循环后n是32,并且n的值正在改变。然而,在执行n--之前,n存储在32中的r中,然后减去n--。 –