网站建设维护网页设计,营销型网站建设论坛,海南手机网站建设,用电脑做网站的历史在哪里找一#xff1a;前言
我们都知道#xff0c;i是先取值#xff0c;后计算。i是先计算#xff0c;后取值。下面说下它的底层原理 运算符优先级与运算顺序#xff1a; 运算符的优先级只是影响了表达式中的结合顺序#xff0c;不会影响运算顺序#xff0c;运算顺序永远都是从…一前言
我们都知道i是先取值后计算。i是先计算后取值。下面说下它的底层原理 运算符优先级与运算顺序 运算符的优先级只是影响了表达式中的结合顺序不会影响运算顺序运算顺序永远都是从左至右计算 例如如下的代码 int x 3;int y 1 || (x 1) (x 1); 运行后x3y1。因为虽然的优先级高于||但是运算时还是从左至右计算||的短路作用导致||后面不需要计算了 二原理
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,此时i1接着赋值的时候将栈中元素赋给ii又被赋值为0再入栈 3.输出时取栈顶元素0因为i会创建临时变量所以使用i会减少一个变量的创建但是这种性能上的优化对于一个值类型变量来说可忽略不计 int i 0;
i i;
Console.WriteLine(i);
结果是1 执行步骤是 1.将常量0压入操作数栈中 2.从栈中取出元素0将局部变量i的值1,此时i1再入栈 3.输出时取栈顶元素1 int i 1;
i i i;
Console.WriteLine(i);结果是4 执行步骤是 1.将常量1压入操作数栈中 2.从栈中取出元素1赋值给i将i的值1后等于2再入栈此时i2。2再次入栈然后再将i的值1此时i3计算时使用操作数栈中的2和2相加结果为4再赋值给i再将i入栈 3.输出时取栈顶元素4 三总结
i先入栈再1i先1再入栈