对编辑器比较了解的帮忙看下

i=3;
i=i--;
System.out.println(i);

这个编辑器后台是如何去运算的。
java编辑器、C的编辑器得到的结果会不一样 eclipse 和 VC6.0编辑运行的结果是一样的,有些编辑器不一样

这和编辑器没有关系,这是编译器决定的。

我已经多次回答这个问题了,这是语言未定义行为,换一句话说,这里同一个代码有不同的理解方式,语言规范没有规定必须使用哪种理解方式

所以不同的编译器可以编译成不同的代码,自然结果就不同了。

我觉得以C语言的逻辑来看,怎么运行结果都是2啊
i=i--; 这句话相当于 i--;
所以应该答案是一样的吧

关于未定义行为,我再举一个例子,你们学校的老师出了一个题目,请计算1+2+...+n=?

小明的程序这么写的
int foo(int n)
{
return (1 + n) * n / 2;
}
小军的程序这么写的
int foo(int n)
{
int sum = 0;
for (int i = 1; i <= n) sum += i;
return sum;
}
这两个程序都是对的。

但是请注意,这两个程序不等价。比如说foo(-100),两个程序返回的结果是不同的。

编译器也是如此

语言规范就是老师布置的题目
VC++ Java等等就是不同的学生去做这个题目

一些代码,比如你说的那个,就是属于超过题目范围的输入情况(编译器就是一个把源程序当作输入,得到目标程序的程序)
对于语言规范要求的,编译器的输出必须确定,就好比两个程序接收一个大于1的整数输出是一样的。
对于超过规范的,编译器的输出可以相同可以不同

其实C里面有大量的未定义行为

http://blog.csdn.net/wuhui_gdnt/article/details/8736838
http://www.guokr.com/blog/471312/
http://blog.jobbole.com/53211/

(文章中列出的只是冰山一角)

如1楼所说,这是C语言的一个未定义行为,不同的编译器就不同的解释,有的会先将i减减在赋给i,有的先赋值再减减,C语言没有规定必须先执行哪个。所以要想使你的程序可移植的话就不要用这种语句。

http://blog.chinaunix.net/uid-13701930-id-336476.html

过程:tmp = i,i=i-1,i=tmp;

。。又玩这种语法效果,囧,这个建议是还是别玩语法糖 了撒
i--是先赋值,然后i再减1,至于有些编译器的效果不一样,就要看编译器的内部的设定了

你想说的是编译器吧?!

这个是编译器导致的区别

这是编译器的问题。 另外如果不是为了榨取极限性能,最好还是别用这种写法。