c#中前增与后增自增自减运算符优先级有什么区别

c#语言自增自减运算符深入剖析 - 快乐的~小和尚 - 博客园
C语言的++和--对于初学者来说一直都是难题,甚至很多老手也会产生疑惑;
最大的问题在于 ++可以放在变量后面,也可以放在前面;
如 i++; ++i;
自减运算符与++原理一样,只是变量变价为减而已,下面我们主要就以++为例;
&   int i = 3, j = 4;&&&&&&&&&&& i++;&&&&&&&&&&& ++j;&&&&&&&&&&& Console.WriteLine(i);&&&&&&&&&&& Console.WriteLine(j);
对此大家都不会有什么疑惑,输出结果是4和5;下面我们来做一个小改动:
&  &&& int i = 3, j = 4;&&&&&&&&&&& int a=i++;&&&&&&&&&&& int b=++j;&&&&&&&&&&& Console.WriteLine(a);&&&&&&&&&&& Console.WriteLine(b);
结果又是多少呢?这里就开始出现++后置和++前置的区别了,结果是3和5;
1.  ++后置:第一步计算返回结果,与变量相同,第二步将变量的值自增1(通俗的讲就是先返回结果并将结果赋值给变量a,然后再自增)
2.  ++前置:第一步计算返回结果并且自增1,第二步将变量的值自增1(通俗的讲就是先自增1,然后返回自增1的结果,然后赋值给变量b)
很明显 a=i++,是先把i=3赋值给a,然后i再自增;
  &&& b=++j,是先把j自增为5,然后再赋值给b;
其实基本道理就是这样,但在更复杂的情况下又是如何呢,咋们来看看:
&&&&&&&&&&& int i = 3, j = 4;&&&&&&&&&&& int a=i++ + i++;&&&&&&&&&&& int b=++j + ++j;&&&&&&&&&&& Console.WriteLine(a);&&&&&&&&&&& Console.WriteLine(b);
上面的结果是7和11;
咋们来看下 a=i++ + i++;第一个i++ 这里返回结果为3,然后i自增为4;由于运算还没有结束,故这个时候不会立即把3赋值给a;再看第二个i++,这个时候i为4,故返回结果为4;所以a=3+4;输出7
b=++j + ++j;第一个++j,j自增为5并且返回5;第二个++j,j这时候是5自增为6并且返回6;故b=5+6;输出11;
来点复杂的
&int i = 3, j = 4;&&&&&&&&&&& int a=i++ + j++ + --i + ++j;&&&&&&&&&&& int b=--j + j++ + i-- + i++ + --&&&&&&&&&&& Console.WriteLine(a);&&&&&&&&&&& Console.WriteLine(b);
上面的执行代码,解析为下面就是:
&&&&&&&&&&& a = 3 + 4 + 3 + 6 = 16;&&&&&&&&&&& b = 5 + 5 + 3 + 2 + 2 = 17;
如果你的结果不是这个,希望再看下上面的例题1和2;C# 自增运算符 自增量为2 如何表达_百度知道
C# 自增运算符 自增量为2 如何表达
a++ 是自增1
如何写才能让a自增2呢
我有更好的答案
蛐蛐四季豆|四级a+=2; 这种比较好理解吧同楼上
a+=2; 这种比较好理解吧
a++就是a=a+1的意思,那自增2就是a=a+2咯~~~
(++a)++;前加和后加组合
a+=2就是加二
其他1条回答
为您推荐:
其他类似问题
运算符的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在前置自增与后置自增操作中,当属后者最为麻烦。
某书中有一道简单的题目
如下几行 Java 代码:
import java.util.*;
public class Text{
&&& public static void main(String[] args){
&&&&&&& int j = 0;
&&&&&&& for(int i = 0; i & 100; i++)
&&&&&&&&&&& j = j++;
&&&&&&& System.out.println(j);
&&& }
}
执行结果是多少? 我当时写了两个答案:0,100.
第一个答案:0 是因为对于后置++操作符,号称用了中间缓存变量机制,其实内部实现大致如下
temp =
j = j + 1;
j =
第二个答案:100,
为什么呢?请看以下一段C++代码
#include &iostream&
int main()
{
&&& int j = 0;
&&& for(int i = 0; i & 100; i++)
&&&&&&& j = j++;
&&& cout && j &&
&&& return 0;
}
结果是就是100。
难道C++就没有中间缓存变量机制?当然不是。
导致Java和C++在这方面的区别的原因不在机制本身,而在于编译器的问题。在C++中,后置自增同样会比前置自增多了一份中间缓存的工作。但是请注意,在C++中,一些基本类型如int,double以及指针类型,在进行后置自增操作的时候,编译器将会为这些类型省去中间缓存变量的操作,采取其它方式(我猜是直接按照优先级拆分代码)。
所以在这方面,Java与C++显得有点不同,或者性能与C++显得不足。我是这样评估的,在Java中前置自增的性能总是要比后置自增性能要好(没有缓存变量赋值);C++中大部分也是这样,但是如果是对基本类型和指针进行后置自增操作,那么性能将和前置自增一样。
但是一般不建议在复合语句中使用后置自增,尽量用前置自增。因为在后置自增中,C++只保证自增在所在语句执行后进行自增,却没有保证在什么时候自增(虽然几乎所有的都是在当前语句执行完之后马上自增,但是据我所知,C++并没有提供这方面的保证,这是一个令人惊讶的现实)
tuojian.tj
浏览: 15394 次
来自: 广州
楼主,我用MOTO的手机录制后发到PC上,发现ffty的描述符 ...
tapestry1122 写道这个是属于硬件编码吧说到这个来气 ...
楼主,您好,我是通过socket传输,在服务器上保存为文件,可 ...
yf543 写道tapestry1122 写道yf543 写道 ...
tapestry1122 写道yf543 写道tapestry ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'【图文】轻松学C#之运算符重载_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
轻松学C#之运算符重载
&&轻松学C#
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢c#编程中各符号的意思。_百度知道
c#编程中各符号的意思。
所以都列出来
我有更好的答案
也就是在逻辑语句中使用赋值运算符代替比较运算符C和C++开发人员应很熟悉大多数C#运算符,这里为新程序员和VB开发人员介绍最重要的运算符,并介绍C#中的一些新变化?把运算符放在表达式的前面称为前置,把运算符放在表达式的后面称为后置.索引运算符(用于数组和索引器)
[]数据类型转换运算符
()条件运算符 (三元运算符)
?。使用它们的惟一场合是在不安全的代码块中;&lt:if (x == 3)C#非常严格的类型安全规则防止出现常见的C#错误。它们的执行方式有所不同.1; %逻辑运算符
!字符串连接运算符
+增量和减量运算符
– –移位运算符
&&比较运算符
??使用C#运算符的一个最大缺点是,与C风格的语言一样,赋值(=)和比较(==)运算使用不同的运算符。例如,下述语句表示“x等于3”:x = 3,而&表示两个不同整数值的按位AND运算。5;= y
x = x / yx %= y
x = x % yx &&= y
x = x && yx &&= y
x = x && y运算符的简化操作
x = x & yx |= y
x = x | yx ^= y
x = x ^ y为什么用两个例子来说明++增量和– –减量运算符。当x++和++x单独占一行时,它们的作用是相同的,对应于语句x = x + 1;);如果要比较x和另一个值,如果x等于7,则x% 5会返回2。在C#中很少会用到指针,因此也很少会用到间接寻址运算符(–&gt:空接合运算符
。在C#中,下述语句会产生一个编译错误:if (x = 3)习惯使用宏字符&来连接字符串的VB程序员必须改变这个习惯:委托连接和删除运算符(见第6章)
+ –对象创建运算符
new类型信息运算符
sizeof (只用于不安全的代码) is typeof as类
符溢出异常控制运算符
checked unchecked间接寻址运算符
& (只用于不安全代码) []命名空间别名限定符(见第2章)
5-2运算符的简化操作
& &gt,因为只有在此C#才允许使用指针。但当它们用于表达式内部时,把运算符放在前面(++x)会在计算表达式之前递增x,换言之,递增了x后,在表达式中使用新值进行计算。而把运算符放在后面(x++)会在计算表达式之后递增x—— 使用原来的值计算表达式。指针和不安全的代码见第7章;=
&=赋值运算符
&lt。增量或减量运算符可以作用于整个表达式,也可以作用于表达式的内部。在C#中,使用加号+连接字符串;、&)只能用于不安全的代码(这些代码绕过了C#类型安全性的检查),这些不安全的代码见第7章的讨论。表
符算术运算符
+ – * &#47,就需要使用两个等号(==)。| 则在两个整数之间执行按位OR运算。VB程序员可能还没有使用过%(取模)运算符,它返回除运算的余数,例如。C#支持表5-1所示的运算符,其中有4个运算符(sizeof、*、–&=
&&=成员访问运算符(用于对象和结构)
运算符的简化操作表5-2列出了C#中的全部简化赋值运算符, ++x
x = x + 1x– –,– –x
x = x – 1x+= y
x = x + yx–= y
x = x – yx *= y
x = x * yx &#47
采纳率:78%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 自增自减运算符例题 的文章

 

随机推荐