C#中i++和++i的底层原理

本文详细解析了C#编程语言中i++和++i的区别以及它们的运算顺序和底层实现机制。通过示例代码解释了这两种自增运算符在不同情况下的结果和执行步骤,强调了运算符优先级并不影响运算顺序,同时讨论了短路逻辑在条件运算中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:前言

我们都知道,i++是先取值,后计算。++i是先计算,后取值。下面说下它的底层原理

运算符优先级与运算顺序:
运算符的优先级只是影响了表达式中的结合顺序,不会影响运算顺序,运算顺序永远都是从左至右计算
例如如下的代码:
int x = 3;
int y = 1 || (x = 1) && (x += 1);
运行后x=3,y=1。因为虽然&&的优先级高于||,但是运算时还是从左至右计算,||的短路作用导致||后面不需要计算了


二:原理

int i = 0;
i++;
Console.WriteLine(i);

结果是1
执行步骤是:
1.将常量0压入操作数栈中
2.从栈中取出元素0,局部变量+1后再压入栈
3.输出时取栈顶元素1 
无论是i++还是++i,底层执行都是一样的,因为这里并没有将++作为赋值表达式符号,底层也就视为只是将变量+1的操作,所以是没有区别的


 

int i = 0;
i = i++;
Console.WriteLine(i);

结果是0
执行步骤是:
1.将常量0压入操作数栈中
2.从栈中取出元素0,将0入栈,然后再将局部变量i的值+1,此时i=1,接着赋值的时候将栈中元素赋给i,i又被赋值为0,再入栈
3.输出时取栈顶元素0
因为i++会创建临时变量,所以使用++i会减少一个变量的创建,但是这种性能上的优化对于一个值类型变量来说可忽略不计


 

int i = 0;
i = ++i;
Console.WriteLine(i);

结果是1
执行步骤是:
1.将常量0压入操作数栈中
2.从栈中取出元素0,将局部变量i的值+1,此时i=1,再入栈
3.输出时取栈顶元素1


 

int i = 1;
i = ++i + i++;
Console.WriteLine(i);

结果是4
执行步骤是:
1.将常量1压入操作数栈中
2.从栈中取出元素1赋值给i,将i的值+1后等于2再入栈,此时i=2。2再次入栈,然后再将i的值+1,此时i=3,计算时使用操作数栈中的2和2相加结果为4,再赋值给i,再将i入栈
3.输出时取栈顶元素4


三:总结

i++先入栈再+1,++i先+1再入栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello Bug.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值