关于前置运算符在c语言里的复合运算

文章探讨了C语言中自增运算符的使用,特别是前置运算符和后置运算符在复合运算中的逻辑。通过示例代码解释了为什么`q=++b+++++b+++++b;`的结果不等于预期的15,以及如何正确理解这种运算顺序。测试用例显示,运算符的优先级和结合性决定了计算过程,而非简单的从右到左执行。
摘要由CSDN通过智能技术生成

关于前置运算符和后置运算符在c语言里的复合运算

  • test.1

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void main()
{
int a=2, p;
p = (a++) + (a++) + (a++);
printf(“a=%d,p=%d\n”,a,p);
int b=2, q;
q = (++b)+(++b)+(++b);
printf(“b=%d,q=%d”,b,q);
}

Image
主要是对这里前置运算符的运算逻辑不理解
我原来的理解是

b=2;
q=(++b)+(++b)+(++b);

自右向左运算,
1.最右边++b先将b自增加1,再进行运算
   \:\: 开始b=2
   \:\: 自增加1
   \:\: b=3
   \:\: 得 q=(++b)+(++b)+3;
2.后面一个++b继续
   \:\: b=3
   \:\: 自增加1
   \:\: b=4
   \:\: 得 q=(++b)+4+3;
2.后面一个++b继续
   \:\: b=4
   \:\: 自增加1
   \:\: b=5
   \:\: 得 q=5+4+3;
\qquad q=5+4+3=12 ≠  ⁣ ⁣ 15 \not=\!\!15 =15

  • 于是继续test.2

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void main()
{
int b=2,q;
q=(++b)+(++b);
printf(“b=%d,q=%d”,b,q);
}

Image

  • test.3

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void main()
{
int b=2,q;
q=++b;
printf(“b=%d,q=%d”,b,q);
}

Image

  • 猜测:c语言里q=(++b)+(++b)+(++b);是先将++b运算完,再将最终得到的b相加
    即从右开始计算
    第一个++b ⇒ \Rightarrow b=3
    第二个++b ⇒ \Rightarrow b=4
    第三个++b ⇒ \Rightarrow b=5
    再把最终得到的b=5相加
    得q=5+5+5=15
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值