C 描述以下代码
我有一个关于我被分配的任务的问题 -有两个整数,C 描述以下代码,c,C,我有一个关于我被分配的任务的问题 -有两个整数,a和b,其值分别为-1和1。 运行以下代码后,a和b的值是多少?为什么 if(!++a) b+=a++; 当我运行这段代码时,我得到了值1和1。我真的不明白为什么。。。我对if语句感到非常困惑,有人能为一个试图学习C的初学者解释一下吗?++a给你增量后的值,所以你得到0,这意味着false。运算符使其为真 那么你基本上有 b = b + a; a++; 因此b保持1,而a获得另一个增量,并最终达到1 这里的主要概念是a++和++a之间
a
和b
,其值分别为-1和1。
运行以下代码后,a
和b
的值是多少?为什么
if(!++a)
b+=a++;
当我运行这段代码时,我得到了值1和1。我真的不明白为什么。。。我对if语句感到非常困惑,有人能为一个试图学习C的初学者解释一下吗?
++a
给你增量后的值,所以你得到0
,这意味着false。代码>运算符使其为真
那么你基本上有
b = b + a;
a++;
因此b
保持1
,而a
获得另一个增量,并最终达到1
这里的主要概念是a++
和++a
之间的区别。如果您使用a++
您将首先获得a的值,然后该值将递增,而++a
的值将首先递增,然后返回。您的代码与此代码等效:
int a = -1;
int b = 1;
a += 1;
if (a == 0) {
b += a;
a += 1;
}
你应该明白为什么这两个变量在这里都是1。现在试着弄清楚为什么这些代码是等价的。当您的代码输入if(!+++a)时,最初的a=-1,并且是预增量,a的第一个增量将发生,因此a将变为0和!0是1,它将进入if块
现在b++=a++;
这里a++是后增量,所以您可以将该语句分为两部分
第一b+=a;b+=0,因此b将保持为1
二是a++;a将变成1
if (!++a)
首先,if(a)
与if(a!=0)
相同。奇怪,但却是真的。零表示假,其他数字表示真
如果(!a)
说,意思就颠倒了
++a
递增a
并返回新值。(与a++
不同,后者增加a
,但返回旧值,而不是新值。)
把所有这些放在一起,这表示“增量a
,并测试答案是否为零”。如果a=-1
,那么这确实是真的
通常,如果(…){do stuff}
,人们会编写,但如果“do stuff”部分只是一条语句,则可以省略括号。我们已经确定该条件在本例中为true,因此运行“b++=a++”行
如果我们在上面加上一些空格,我们就有了
b += (a++);
所以,再次递增a
,但在此之前,在运行此代码时,将它的(旧)值添加到b
@Vladp“…此外,@OP:给自己买一本好的C语言书。答案实在微不足道<代码>
是一个逻辑NOT运算符,++a
和a++
都会减少a
的值,分别产生已经增加的值和原始(尚未增加的)值。这个问题似乎离题了,因为它对所使用的语言甚至缺乏起码的理解。