描述以下代码

时间:2014-01-25 10:15:55

标签: c

我有一个关于我已经获得的任务的问题。

- 有两个integeras,ab,其值分别为-1和1。  运行以下代码后,ab的价值是什么。

 if(!++a)

   b+=a++;

当我运行这段代码时,我得到了值1和1.我无法弄明白为什么虽然...我对if语句感到很困惑,是否有人可以为初学者尝试学习C来解释这个?

4 个答案:

答案 0 :(得分:2)

您的代码与此代码相同:

int a = -1;
int b = 1;

a += 1;
if (a == 0) {
    b += a;
    a += 1;
}

你应该明白为什么这两个变量最终都是1。现在试着弄清楚为什么这些代码是等价的。

答案 1 :(得分:0)

++a会在递增后为您提供值,因此您得到0,这意味着为false。 !运算符使其成为true

然后你基本上有

b = b + a;
a++;

所以b仍然是1a会获得另一个增量,最终也会以1结束。

这里的主要概念是a++++a之间的区别。如果您使用a++,您将首先获得a的值,然后该值会递增;而对于++a,该值会先递增然后返回。

答案 2 :(得分:0)

最初a = -1,当你的代码进入if(!++ a)并且它是预先增加a的第一个增量将发生所以a将变为0并且!0为1并且它将进入if块。

现在b + = a ++; 这里有一个++后增量,所以你可以将这个语句分成两部分。

第一个b + = a; b + = 0,因此b将保持为1。

第二个a ++; a将成为1.

答案 3 :(得分:0)

if (!++a)

首先,if (a)if (a != 0)相同。很奇怪,但也是如此。零表示错误,任何其他数字表示正确。

if (!a)反映了这意味着什么。

++a递增a并返回新值。 (与a++不同,a增加a但返回旧值,而不是新值。)

将所有这些放在一起,这表示“增加a = -1并测试答案是否为零”。如果if (...) {do stuff},那确实如此。

通常人们会写b += (a++); ,但如果“做东西”部分只是一个陈述,你可以省略括号。在这种情况下,我们已经确定条件为真,因此运行“b + = a ++”行。

如果我们在其上放置一些空格,我们有

a

因此,再次增加b,但在此之前,将其(旧)值添加到{{1}}。