2016-12-14 58 views
2

我似乎有这个'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。为什么是这样?我哪里错了?

+1

为什么它应该是'32'? –

+0

因为循环后n是32,并且n的值正在改变。然而,在执行n--之前,n存储在32中的r中,然后减去n--。 –

回答

10

r = n--;在分配给r后递减n。

8

这不是for问题,而是--nn--

  • n--作为表达n--的值第一返回n,然后执行减法n <- n-1

  • --n先做减法n <- n-1,然后返回n新价值的--n


  1. https://en.wikipedia.org/wiki/Increment_and_decrement_operators
+0

啊。我懂了。所以当它像是说y = x--时。 y的值将是减量前x的值。除了++和 - 之外,还有其他可能发生这种情况的情况吗? – FShiwani

+0

@FShiwani不完全,'='处于最低优先级,'n - '在分配之前发生。在一种语言中,有两种类型,'expression'和'statement',每个'expression'都有一个值,比如'n - ',所以'r = n - '表示将'r'赋值为**表达式**'n - ','n - '的值是在递减前的'n'值。 – delta

-2

int n = 1, r = 0, i; 
 

 
    for(i=0; i<=5; i++) 
 
    r *= 2; 
 

 
n = r--;

下面是最终答案。去检查它。希望能帮助到你。

+0

由于'r'在最后一次减少之前被分配了'n'的值,所以不会将_rr初始化为0,也不是必需的。删除“我”的声明是错误的。但是,为什么你想改变'for'语句的控制表达式呢?问题是关于为什么这段代码分别产生32和31的'r'和'n'的最终值。 –

+0

嗨,我只是更新了我的答案。谢谢 – JohnC