b=a++问题

xmsheji 2009-08-01 07:10:03
int a=0;
int b=a++;


b为什么是0?
++的优先级不是高于=,应该先自增,然后再把1付给b啊?
...全文
281 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
iloveppmm 2009-08-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ginni215 的回复:]
例如:
1+++1=?
自左向右就是优先从左边考虑,结果就是2
自右向左就是优先从右边考虑,结果就是3


[/Quote]

这样的代码就是垃圾。

无论编译器如何,谁能知道作者三个加号,到底前两个是为了自加,还是后两个为了自加??

a++ + b=??

还是 a+ ++b=?

谁能看的出来?? 要不你就加个括号 (a++)+B 之类的。


arlang 2009-08-01
  • 打赏
  • 举报
回复
除了学校的老师喜欢用这个的东西来考人,我的代码里面是坚决不写这样的代码。
为何不写成两句:
b=a;
a++;
zzyzgydotnet 2009-08-01
  • 打赏
  • 举报
回复
up
云水千寻 2009-08-01
  • 打赏
  • 举报
回复
不好意思,操作失误
可恨CSDN不允许重新编辑自己的回复
云水千寻 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]
根本不是那个意思。

a++ 的意思是在使用完a之后这条语句执行完之后才对a加一。而 ++a 的意思是在执行这条语句之前就对a加一。
[/Quote]请楼主仔细体会加亮的部分
云水千寻 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xmsheji 的回复:]
都在告诉我结果,没人回答我的疑问啊?

为什么先执行赋值?赋值符的优先级是低于自增++的啊?

[/Quote]不能只考虑优先级。“++”和“--“这两个是运算符,有优先级的特性,但是你不能按照一般的运算符的优先级特性来理解这两个运算符,这两个运算符有自己独特的性质。正如string 类型在c#中是跟一般的引用类型的特性不完全相同一样。
cpp2017 2009-08-01
  • 打赏
  • 举报
回复
顺序没错.

protected void Page_Load(object sender, EventArgs e)
{

this.b = a++;
Response.Write("<BR>");
this.b = ++a;


}


private int a
{
get
{

Response.Write("AAA");
return 0;
}
set
{
Response.Write("BBB");

}
}
private int b
{
set
{

Response.Write("CCCCCCC");
}
}


是先++a,再赋给b.只不过++a返回的是a原来的值.
xmsheji 2009-08-01
  • 打赏
  • 举报
回复
我可能对 自右向左,和自左向右,理解的不好?
哪位帮忙简洁的解释一下?
SQL77 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xmsheji 的回复:]
都在告诉我结果,没人回答我的疑问啊?

为什么先执行赋值?赋值符的优先级是低于自增++的啊?

[/Quote]
这应该是规定,不是赋值符的问题
xmsheji 2009-08-01
  • 打赏
  • 举报
回复
都在告诉我结果,没人回答我的疑问啊?

为什么先执行赋值?赋值符的优先级是低于自增++的啊?
wuyq11 2009-08-01
  • 打赏
  • 举报
回复
int b=a++先使用a取值,a再相加
ivws_19 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xmsheji 的回复:]
b=a++为什么相当于 (b=a)++?
为什么先执行赋值?赋值符的优先级是低于自增++的啊?
[/Quote]
b=a++ 是先执行完此语句,a再自增,不是(b=a)++
xmsheji 2009-08-01
  • 打赏
  • 举报
回复
b=a++为什么相当于 (b=a)++?
为什么先执行赋值?赋值符的优先级是低于自增++的啊?
SQL77 2009-08-01
  • 打赏
  • 举报
回复
B=A++先使用后加1//如果A=0 结果B=0 A=1
B=++A先加1后使用//如果A=0 结果B=1 A=1
ginni215 2009-08-01
  • 打赏
  • 举报
回复
例如:
1+++1=?
自左向右就是优先从左边考虑,结果就是2
自右向左就是优先从右边考虑,结果就是3

a12321321321312321 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]
根本不是那个意思。

a++ 的意思是在使用完a之后,这条语句执行完之后才对a加一。而 ++a 的意思是在执行这条语句之前就对a加一。
[/Quote]
同意、
  • 打赏
  • 举报
回复
根本不是那个意思。

a++ 的意思是在使用完a之后,这条语句执行完之后才对a加一。而 ++a 的意思是在执行这条语句之前就对a加一。
xmsheji 2009-08-01
  • 打赏
  • 举报
回复
自右向左,和自左向右是什么意思?
华夏小卒 2009-08-01
  • 打赏
  • 举报
回复

不错。
b=a++ -- 是先把a赋值给b,a再加1
b=++a -- a加1,再赋给b
Skyhoo 2009-08-01
  • 打赏
  • 举报
回复
NO。。。a++是先赋值后再自加的 所以b=0 但是如果你写 b=++a 那么 b=1

自加自减运算是很重要的,它是是从右向左的,可能也有少部分编译器是自左向右的。

这些都要自己测试了

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧