我有一个关于我已经获得的任务的问题。
- 有两个integeras,a
和b
,其值分别为-1和1。
运行以下代码后,a
和b
的价值是什么。
if(!++a)
b+=a++;
当我运行这段代码时,我得到了值1和1.我无法弄明白为什么虽然...我对if语句感到很困惑,是否有人可以为初学者尝试学习C来解释这个?
答案 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
仍然是1
而a
会获得另一个增量,最终也会以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}}。