黑马程序员技术交流社区

标题: 关于两个数交换问题的延伸 [打印本页]

作者: 祁焱    时间: 2011-10-19 11:42
标题: 关于两个数交换问题的延伸
引自交换两个变量的值这个帖子:
菜鸟版:
            int temp = a;

            a = b;

            b = temp;
入门版:
           a = a + b;

           b = a -  b;

           a = a - b;
高手版:
          a  = a ^ b;

          b =  a ^ b;

          a  = a ^ b;
专家版:
         a = b + 0 * (b = a);
在这个帖子中专家版的方法为什么在MyEclipse(或Netbeans)和VC6.0中运行的结果不同啊?
public class JH {
   public static void main(String[] args)  {
        int a=3,b=5;
        a=b+0*(b=a);
        System.out.println("a="+a+" b="+b);
    }
}
在MyEclipse(或Netbeans)中运行结果为:a=5 b=3
#include "stdafx.h"

void main()
{
        int a=3,b=5;
    a=b+0*(b=a);
        printf("a=%d b=%d\n",a,b);
       
}
在VC6.0中运行结果为:a=3  b=3麻烦哪位高手给说明一下原因啊?

该贴已经同步到 祁焱的微博
作者: 张奇云    时间: 2011-10-19 21:40
对于
       int a=3,b=5;
       a=b+0*(b=a);
java中是从左至右的计算,先是“+”号左边的b=5,然后计算“+”号右边的0*(b=a),此时把a的值赋值给b,所以b=3,0*(b=a)=0,最后把5+0=0的值赋值给a,所以a=5。
但vc却是从右至左的计算,刚好相反,先计算“+”号右边的0*(b=a),b=3,然后再计算“+”号左边的b,此时b已被赋值为3,3+0=3,所以a=3。
个人认为这个专家版在不同的平台容易产生不同的结果,不推荐使用,而入门版和高手版把简单的问题搞得复杂,不见得有什么实际意义。

作者: 祁焱    时间: 2011-10-19 21:51
张奇云 发表于 2011-10-19 21:40
对于
       int a=3,b=5;
       a=b+0*(b=a);

明白了,谢谢你的回答,嘿嘿!
作者: 杨强    时间: 2011-10-24 19:49
受益,3q{:soso_e113:}{:soso_e113:}{:soso_e113:}{:soso_e113:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2