c中'+='的用法

Usage of '+=' in c

提问人:ivan pasquini 提问时间:3/27/2023 最后编辑:ikegamiivan pasquini 更新时间:3/27/2023 访问量:82

问:

我不明白为什么在这段代码中,“b+=”返回 6 而不是 5。运算符 '+=' 右端的运算应为 0。

  1. I/2 = 4
  2. a-4= 0

所以运算符 '+=' 应该只加:0。

#include<stdio.h>

int main(){
  int a=4, i=8;
  int b;
  
  b=++a; 
  printf("%i\n",b);

  b+=a-i/2;
  printf("%i\n",b);

}

仅使用sintax理论

C 运算符 赋值-运算 符预增

评论

2赞 dbush 3/27/2023
你知道什么是吗?++a
1赞 Some programmer dude 3/27/2023
那是 C,它被正确标记了。而且没有操作员。 真的.=+b=++ab = ++a
0赞 Some programmer dude 3/27/2023
至于和一样,也和一样。b+=a-i/2b += a - i / 2b = b + (a - (i / 2))
2赞 pmacfarlane 3/27/2023
如果你打印 too 的值,你可能会更开明。a
1赞 ayseguldmrblk 3/27/2023
A++ 和 ++A 是 A = A + 1 的快捷方式,因此值实际上会发生变化,它们之间的区别是递增后在语句执行后更改变量 A 的值,而递增前在将变量 A 分配给变量 B 之前更改变量 A 的值。

答:

1赞 Frédéric LOYER 3/27/2023 #1

执行 时,a 递增。其值变为 5。然后,然后是 1。b=++a;a-i/25-8/2

4赞 Vlad from Moscow 3/27/2023 #2

在此声明之后

b=++a;

b并且将等于由于前缀增量运算符。a5++

来自 C 标准(6.5.3.1 前缀递增和递减运算符)

2 前缀 ++ 运算符的操作数值递增。 结果是递增后操作数的新值。这 表达式 ++E 等价于 (E+=1)

所以在这个复合赋值语句中

b+=a-i/2;

可以像这样重写

b = b + a - i/2;

你有

b = 5 + 5 - 4

因此,您拥有的 等于 .b6

如果将变量初始化为零,则可以得到预期的结果b

int b = 0;

以及是否删除此语句

b=++a;