A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 祁焱 黑马帝   /  2011-10-19 11:42  /  2943 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对于
       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:04
沙发
张奇云 发表于 2011-10-19 21:40
对于
       int a=3,b=5;
       a=b+0*(b=a);

明白了,谢谢你的回答,嘿嘿!
回复 使用道具 举报
引自交换两个变量的值这个帖子:
菜鸟版:
            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麻烦哪位高手给说明一下原因啊?

该贴已经同步到 祁焱的微博

3 个回复

倒序浏览
杨强 黑马帝 2011-10-24 19:49:37
板凳
受益,3q{:soso_e113:}{:soso_e113:}{:soso_e113:}{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马